3 ms·
The preprocessor doesn’t know that u32 defined in foo.h is the same type as u32 defined in bar.h. So you’ll get an error when importing both.
by pavlov 3y ago
The preprocessor doesn’t know that u32 defined in foo.h is the same type as u32 defined in bar.h. So you’ll get an error when importing both.
- pornel 3y agoIf C made this change, it could also make it legal to redefine u32 etc as appropriate integer types any number of times without erring.
- saagarjha 3y agofoo.h defines i64 as “long” and bar.h defines it as “long long”. Now what?
- kevin_thibedeau 3y agoThis would break legacy code. I had one employer with a bool type that was a 32-bit integer because of obscure alignment issues. This is why _Bool exists and the bool typedef has to be brought in explicitly with stdbool. You can't just go and usurp popular short type names. The standard reserved *_t and _[A-Z].+ for this purpose. People have been writing portable code with the expectation that future standards aren't going violate that promise and break things.
- alexvoda 3y agoThis is just one of the reasons that new languages that dispense with outdated assumptions and insted make assumptions more suitable to our times are a good thing. C and C++ are really old and some things can not be fixed with libraries.