它是一个trick生意,但<inttypes.h>
from C99 and subsequently显示了这样做的途径。
对于你们的每一种定义类型,你们都需要向采购处提供一套适当的“优先事项”和“SCN”宏观,小心避免标准化的名称空间。
例如,您可使用XYZ作为特定项目预先确定,并产生:
XYZ_PRIx_my_offset_t
XYZ_PRId_my_offset_t
XYZ_PRIX_my_offset_t
XYZ_PRIu_my_offset_t
XYZ_PRIo_my_offset_t
和SCN当量。 此外,你在基数类对应宏观上界定了这些要素,因此:
#define XYZ_PRIx_my_offset_t PRIx32
#define XYZ_PRId_my_offset_t PRId32
#define XYZ_PRIX_my_offset_t PRIX32
#define XYZ_PRIu_my_offset_t PRIu32
#define XYZ_PRIo_my_offset_t PRIo32
在您的法典中,你采用了XYZ_PRIx_my_offset_t
的形式。 宏观:
printf("Offset: 0x%.8" XYZ_PRIX_my_offset_t "
", my_offset_value);
如果你随后需要把所有东西都变为64个轨道,那么你会适当编辑这些类型和宏观定义,其余部分则保持不变。 如果你真心谨慎,你可以彻底改变。
Make sure you compile on both 32-bit and 64-bit systems with lots of warnings set. GCC will not warn about non-problems on your current platform, but they may show up on the other. (I just fixed some code that was clean on 64-bit but unclean for 32-bit; it now uses a macro like XYZ_PRId_int4
instead of %d
and compiles cleanly on both.)