【发布时间】:2021-10-24 18:24:39
【问题描述】:
请解释以下程序的输出:
#include <stdio.h>
int main(i) {
printf("i=%d\n",i);
return 0;
}
输出: 我=1
【问题讨论】:
-
它不是有效的标准 C,所以你必须告诉你正在使用哪个编译器以及带有哪些非标准扩展。
-
提示:尝试使用一些额外的参数运行您的程序 - 例如,
a.out 1 2 3,看看是否有任何变化。不过,这绝对是 UB。 -
看起来
i对应于here 描述的第二个函数签名中的argc。第一个命令行参数对应于程序名称,所以总会有一个参数,这就是i=1的来源。但无论如何它都是毫无意义的代码,因为它不符合任何一个签名,也不符合 C99 或更高版本中指定的实现定义的签名,从而导致了这种未定义的行为。 -
K&R 语法,未指定时默认为
int。哎哟!它有效,但碰巧! -
顺便说一句,我真的不喜欢考试中的这类问题。如果你要测试我的知识,至少问问我实际要写的东西。