如何在C中打印int的大小?
我正在尝试在RHEL 5.6,64位上编译以下代码,并且我不断收到警告
“var.c:7:warning:format'%d'expect type'int',but argument 2 has type'long unsigned int'”
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int n =10;
printf("The size of integer is %dn", sizeof(n));
}
如果我将“n”的声明更改为以下内容无关紧要
我想要做的就是在我的机器上打印整数的大小,而不真正查看limits.h。
sizeof函数返回一个size_t
类型。 尝试使用%zu
作为转换说明符而不是%d
。
printf("The size of integer is %zun", sizeof(n));
为了澄清,如果您的编译器支持C99,请使用%zu
; 否则,或者如果您希望获得最大的可移植性,打印size_t
值的最佳方法是将其转换为unsigned long
并使用%lu
。
printf("The size of integer is %lun", (unsigned long)sizeof(n));
原因是size_t
由标准保证是一个无符号类型; 但是该标准没有指定它必须具有任何特定的尺寸,(只是足够大来表示任何对象的尺寸)。 事实上,如果unsigned long不能代表你的环境的最大对象,你甚至可能需要使用一个无符号的long long cast和%llu
说明符。
在C99中添加了z长度修饰符以提供一种方法来指定要打印的值是size_t类型的大小。 通过使用%zu
您表示正在打印的值是size_t
大小的无符号值。
这是你不应该考虑它的那些东西之一,但是你确实需要这样做。
进一步阅读:
你的问题是size_t是一个无符号类型。 尝试使用
printf("The size of integer is %un", sizeof(n));
你应该摆脱那个警告。
我认为你应该这样写:
printf("The size of integer is %dn", sizeof(int));
链接地址: http://www.djcxy.com/p/72213.html