我收到警告warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat]
我正在编写一个非常基本的程序,它提供了数据类型的大小,但是在Linux环境中我得到了这个警告,而在Visual Studio中,程序没有任何警告。源代码如下: -
#include<stdio.h>
int main()
{
int a;
printf("\nThe Size Of Integer A Is = \t%d", sizeof(a));
return 0;
}
答案将不胜感激,任何人都可以告诉我一种解决此类警告的正确方法,因为我是这个C的新手并且是标准。
答案 0 :(得分:4)
sizeof
返回size_t
类型。使用%zu
说明符打印sizeof
的值。
printf("\nThe Size Of Integer A Is = \t%zu", sizeof(a));
sizeof
和_Alignof
运营商:5两个运算符的结果值是实现定义及其类型(a
unsigned integer
类型)是size_t
,在<stddef.h>
(以及其他标题)中定义。
注意:正如loreb在comment中指出的那样,当您在Windows中编译代码时,很可能会收到如下警告:
[Warning] unknown conversion type character 'z' in format [-Wformat]
[Warning] too many arguments for format [-Wformat-extra-args]
答案 1 :(得分:1)
sizeof
返回size_t
而不是int
在%zu
printf
答案 2 :(得分:0)
在C99中,size_t变量的正确格式为%zu。
使用:
printf("\nThe Size Of Integer A Is = \t%zu", sizeof(a));