Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个C程序可以工作,但编译会产生错误。为什么?_C - Fatal编程技术网

这个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 = %

我有一个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 = %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
“返回”a
size\t

Try
printf(“第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