我刚刚在Wikipedia上找到了此代码。链接:http://en.wikipedia.org/wiki/Sizeof#Use
代码:
/* the following code illustrates the use of sizeof
* with variables and expressions (no parentheses needed),
* and with type names (parentheses needed)
*/
char c;
printf("%zu,%zu", sizeof c, sizeof(int));
它指出:“应该使用z前缀来打印它,因为实际大小在每种体系结构上都可能不同。”
我在编译器上尝试过,但是得到以下结果:
zu,zu
z
,您可能会没事的。为正确起见,请确保您的printf
格式说明符与类型的大小匹配。在这方面,打开编译器会给您的所有警告可能会有所帮助。您的报价:
应该使用z前缀来打印它,因为实际大小在每种体系结构上都可能不同
指的是size_t
(由sizeof
运算符返回的类型)可以随体系结构而变化的事实。 z
旨在使您的代码更具可移植性。但是,如果您的编译器不支持它,那将无法解决。只需摆弄%u
,%lu
等的组合,直到获得有意义的输出为止。
z
长度修饰符已添加到C99标准中的C;您可能有一个不支持C99的编译器。如果您的C编译器不支持,则可以将大小视为无符号长:
printf("%lu,%lu", (unsigned long)sizeof c, (unsigned long)sizeof(int));
-std=c99
为gcc。[如果您的编译器不支持它,但是您知道其他人会支持,则可以解决PRId64
样式(免责声明-PSEUDO CODE AHEAD ..:]]]
#ifdef __SOME_KNOWN_C99_COMPILER
#define PORTUNSIGNED "zu"
#else
#define PORTUNSIGNED "u"
#endif
printf("%-11" PORTUNSIGNED " ways to skin a cat\n");
但是,获得对c99具有功能支持的编译器可能更好。
-std=c99