我有一个类型为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
打印。这在两种情况下都适用。我看看有没有其他的办法。