4 byte for int

KeithRB:
It is hardly C's fault that processors have been increasing in word size.

but it IS C's fault for not providing any native fixed width types built in to the language and creating a default type of 'int' whose width is implementation dependent.

AND even fighting the requests for such fixed width types for so long, literally decades.

One thing that would have prevented many issues over the decades is if the language had provided for fixed width and fixed endian types.

The stdint types now part of the C standard go a long ways to help remove the width issues, but even today many if not most developers are still not using them.
Particularly the types that ensure a minimum width or the fastest type of a minimum size like:
int_least32_t int_fast16_t etc...

Too many people are still casually using int or unsigned int and we are starting to see that sloppiness cause issues in reverse. i.e. people write sloppy code in a 64 bit environment and it breaks when built for a 32 bit environment because the sizes of the default types are not large enough.
Look no further than the gnome 3 disk utility. It now breaks in 32 bit environments because there are many places where int or unsigned int were used instead of something like int_least64_t or uint_least64_t

As an example in Arduino land, a uint8_t maybe better/faster for a loop on AVR but not on other processors.
This is where something like uint_fast8_t should be used to allow the compiler to pick the type that is fastest.

And Arduino even foolishly, IMO, decided to create its own proprietary types like:
bool, byte, and word.
word is not the same width across different processors.
even worse, word(...) is not consistent with the type word as word() uses a fixed width of 16 bits.
so if you use makeWord(h,l) it will make a 16 bit value NOT a word.

And then there are issues with functions like micros(), which depending on the platform might be returning
unsigned long, uint32_t or uint64_t

The sloppiness in Arduino core code and type definitions makes it impossible to have portable sketch code across processors.
This is a great example why the stdint types were created and why the Arduino core code should be using them, but..... it doesn't.

--- bill