猿问

如何使用printf系列可移植地打印size_t变量?

如何使用printf系列可移植地打印size_t变量?

我有一个类型的变量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..这在两种情况下都是可行的。我在看有没有别的主意。


慕田峪7331174
浏览 754回答 3
3回答

汪汪一只猫

使用z修饰语:size_t x = ...;ssize_t y = ...;printf("%zu\n", x);&nbsp; // prints as unsigned decimalprintf("%zx\n", x);&nbsp; // prints as hexprintf("%zd\n", y);&nbsp; // prints as signed decimal
随时随地看视频慕课网APP
我要回答