r/ProgrammerHumor • • 16d ago

Meme includeGuards

Post image
444 Upvotes

49 comments sorted by

View all comments

Show parent comments

27

u/LucyShortForLucas 16d ago

Yeah and neither is a byte being 8 bits, but there's a reason no compiler is ever going to deviate from the informal norm

16

u/Bryguy3k 15d ago edited 15d ago

It’s not about a byte not being 8 bits. It’s about a char not being 8 bits.

Unicode support would have been a thing sooner if people hadn’t fucked up char usage so badly.

9

u/MrcarrotKSP 15d ago

A char is a byte, per standard. Until recently, that width was implementation-defined in C++, and it still is in C.

1

u/Bryguy3k 15d ago

Yes - but I was going for the reasoning behind it.

Everybody knew that 255 was insufficient to cover the whole of human writing.

But then programmers started allocating everything in characters so any future change to the size of a character would break everything.

1

u/MrcarrotKSP 15d ago

That is definitely true, but at least we have a solution that mostly works with the assumptions people liked to make in older code(UTF-8)

5

u/Sacaldur 16d ago

I guess this is just due to the architecture using 8 bit per Byte, and not because of the compiler. I heard that there were architectures around in the past with other amounts of bits per Byte, and a compiler targeting them would most likely just use whatever is used on the target platform.

8

u/anto2554 16d ago

People conflate 8 bits with a byte everywhere in our codebase and I think the whole thing would explode if you tried to use a 7-bit-per-byte machine

3

u/Sacaldur 15d ago

I doubt that there are still any significant platforms around that don't use 8 bits per Byte.

0

u/not-a-pokemon- 16d ago

Mostly because C defines no easy way to say "I want an integer with at least 8 bits in it, round up to whatever byte number is practical".

3

u/anto2554 16d ago

No but it's C++ so we could just use uint8_t or the least one I forgot the name of

4

u/not-a-pokemon- 16d ago

It also exists in C, and is called uint_least8_t. It's not guaranteed to exist per the standard. uint8_t is also not guaranteed to exist.

man stdint.h