如何在C中打印int的大小?
我正在尝试在RHEL 5.6,64位上编译以下内容,并且我一直收到警告
“var.c:7:警告:格式’%d’需要类型’int’,但参数2的类型为’long unsigned int’”
这是我的代码:
#include #include int main() { unsigned int n =10; printf("The size of integer is %d\n", sizeof(n)); }
如果我将“n”的声明更改为以下内容并不重要
- signed int n = 10;
- int n = 10;
我想要做的就是在我的机器上打印整数的大小,而不是真正关注limits.h。
sizeof函数返回size_t
类型。 尝试使用%zu
作为转换说明符而不是%d
。
printf("The size of integer is %zu\n", sizeof(n));
为了澄清,如果您的编译器支持C99,请使用%zu
; 否则,或者如果您想要最大的可移植性,打印size_t
值的最佳方法是将其转换为unsigned long
并使用%lu
。
printf("The size of integer is %lu\n", (unsigned long)sizeof(n));
原因是size_t
由标准保证为无符号类型; 但是标准没有规定它必须具有任何特定的大小(只要大到足以表示任何对象的大小)。 实际上,如果unsigned long不能代表您环境的最大对象,您甚至可能需要使用unsigned long long cast和%llu
说明符。
在C99中,添加了z长度修改器以提供一种方法来指定要打印的值是size_t类型的大小。 通过使用%zu
您指示正在打印的值是size_t
大小的无符号值。
这是你不应该考虑它的事情之一,但你做到了。
进一步阅读:
- printf和size_t
- 便携式打印size_t实例的方法
- 假设size_t是无符号长的
您的问题是size_t是无符号类型。 尝试使用
printf("The size of integer is %u\n", sizeof(n));
你应该摆脱那个警告。
我想你应该写这个:
printf("The size of integer is %d\n", sizeof(int));