我有一个类型的变量size_t
,我想使用打印它printf()
。我要使用哪种格式说明符来进行便携式打印?
在32位机上,%u
似乎正确。我使用编译g++ -g -W -Wall -Werror -ansi -pedantic
,没有警告。但是,当我在64位计算机上编译该代码时,它会产生警告。
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
如果我将其更改为,警告就会如预期的那样消失%lu
。
问题是,我该如何编写代码,以便它可以在32位和64位计算机上免费编译警告?
编辑:作为一种解决方法,我猜一个答案可能是将变量“投射”为足够大的整数,例如unsigned long
,然后使用打印%lu
。在两种情况下都可以。我在寻找是否还有其他想法。
unsigned long
如果您的libc实现不支持z
修饰符,则强制转换为最佳选择。C99标准建议size_t
不要有一个整数转换等级大于long
,那么你是相当安全的