I'm afraid I already know the answer to this but I'd like to be sure...
I have a fairly large project with a header file that typedefs native types:
typedef unsigned long int u32;
typedef signed long int s32;
// etc...
The inevitable has happened and I am now trying to compile on a system where long
is 64 bits instead of 32. What is the best way to go about fixing it?
I could typedef
the above with int
(or int32_t
/uint32_t
from stdint.h) which would satisfy the 32bit size on the platforms I'm aware of but this still seems dubious. There is also the problem with printf
style functions where %ld
was used (the compiler complains and would like to see %d
instead). These would all have to be changed, wouldn't they (perhaps with defines in inttypes.h)?
This seems straightforward but I would like to be sure before I start digging into it (fixing printf
format strings seems daunting).
C has <stdint.h>
, which in C++0x is <cstdint>
. For non-C++0x compilers, you have <boost/cstdint.hpp>
if you don't mind reliance on Boost. The <inttypes.h>
header also includes macros for printf()
format specifiers, which can be adapted for use with the <cstdint>
types. If you're using C++, you should be using <iostream>
, and consequently won't need to worry about typed format specifiers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With