我正在尝试做类似以下的事情;
#ifdef 64-bit #define DECIMAL_FORMAT %ld #else #define DECIMAL_FORMAT %d #endif . intptr_t d; . printf(“Some message with DECIMAL_FORMAT in the middle of it\n”, d);
'intptr_t'类型的变量'd'在32位机器上需要'%d'格式说明符,在64位机器上需要格式说明符'%ld'.我正在寻找一种解决方案,能够在32位机器和64位机器上编译代码,而无需更改GCC命令行或源代码.
我认为__LP64__可能就是你想要的.见http://gcc.gnu.org/onlinedocs/gcc-4.1.2/cpp/Common-Predefined-Macros.html
但是,更好的方法是使用%p说明符来printf()而不是%ld或%d.那你甚至不必担心你的指针大小.
您想要使用中PRI*
定义的宏inttypes.h
.您通过定义启用它们__STDC\_FORMAT\_MACROS
.然后你可以使用
intptr_t d = ... ; printf("This is an intptr_t: %" PRIxPTR "\n", d);
该PRIxPTR
宏将扩大到llx
如果__WORDSIZE == 64
,和lx
或x
以其它方式.