这个C程序可以工作,但编译会产生错误。为什么?
我有一个C程序:这个C程序可以工作,但编译会产生错误。为什么?,c,C,我有一个C程序: #include <stdio.h> int main(void) { int a = 4; short b; double c; int* ptr; /* example of sizeof operator */ printf("Line 1 - Size of variable a = %d\n", sizeof(a)); printf("Line 2 - Size of variable b = %
#include <stdio.h>
int main(void)
{
int a = 4;
short b;
double c;
int* ptr;
/* example of sizeof operator */
printf("Line 1 - Size of variable a = %d\n", sizeof(a));
printf("Line 2 - Size of variable b = %d\n", sizeof(b));
printf("Line 3 - Size of variable c = %d\n", sizeof(c));
/* example of & and * operators */
ptr = &a; /* 'ptr' now contains the address of 'a'*/
printf("value of a is %d\n", a);
printf("*ptr is %d.\n", *ptr);
/* example of ternary operator */
a = 10;
b = (a == 1) ? 20 : 30;
printf("Value of b is %d\n", b );
b = (a == 10) ? 20 : 30;
printf("Value of b is %d\n", b );
}
三次,指向printf语句中“x行”之前。这里发生了什么?因为sizeof()不返回int,而是返回size\u t(在您的例子中,它定义为长无符号int),并且%d格式需要int参数,这就是为什么会出现警告的原因
如果你做了(int)sizeof(a),它应该消失
具有类型“long unsigned int”[-Wformat=]
这是一条警告消息,不是错误消息。这意味着编译器发现了一些看起来像错误的东西,但它仍然能够编译程序
在本例中,我们发现您对传递给
printf
的参数使用了错误的格式说明符(%
thingy)。它应该是%zu
,因为sizeof
“返回”asize\tTryprintf(“第1行-变量a的大小=%d\n”,(int)sizeof(a))
。很可能你的机器上的sizeof
正在返回未签名的long
。哦,不!用户已经有了自我意识!维基百科声称,“自我意识是一种内省的能力,是一种将自己视为独立于环境和其他个体的个体的能力。在传统上,C编译器在其默认配置中将许多“错误”(即严重违反语言规则)报告为“警告”。因此,仅仅因为诊断消息被报告为“警告”,实际上不可能忽略诊断消息。
warning: format '%d' expects argument of type 'int', but argument 2
has type 'long unsigned int' [-Wformat=]
warning: format '%d' expects argument of type 'int', but argument 2