你如何处理在平台之间切换的整数的原生大小?

jos*_*sec 4 c c++ portability

我担心我已经知道答案,但我想确定......

我有一个相当大的项目,其头文件类型为typedefs native types:

typedef unsigned long int    u32;
typedef signed long int      s32;
// etc...
Run Code Online (Sandbox Code Playgroud)

不可避免的事情发生了,我现在正在尝试编译long64位而不是32位的系统.修复它的最佳方法是什么?

我可以typedef在上面int(或int32_t/ uint32_t从stdint.h),这将满足在平台上的32位大小我知道,但这似乎仍值得怀疑.使用printf样式函数也存在问题%ld(编译器抱怨并希望看到%d).这些都必须改变,不是它们(也许是inttypes.h中的定义)?

这似乎很简单但我想在开始深入研究之前确定(修复printf格式字符串似乎令人生畏).

Jon*_*rdy 6

C有<stdint.h>,在C++ 0x中是<cstdint>.对于非C++ 0x编译器,<boost/cstdint.hpp>如果您不介意依赖Boost,则可以使用.所述<inttypes.h>头部还包括用于宏printf()格式说明,其可以适合用于与所述<cstdint>类型.如果你正在使用C++,那么你应该使用它<iostream>,因此不需要担心类型化的格式说明符.