C 中 int main() 的参数
请解释以下程序的输出:
#include <stdio.h>
int main(i) {
printf("i=%d\n",i);
return 0;
}
输出:i=1
回答
在托管环境中,至少有两个有效的签名main:
int main(void)
int main(int, char **)
对于第二种形式,传统的参数名称是argcand argv:
int main(int argc, char **argv)
如果它可以逃脱它,那么实现安排它总是最初调用是合理的
main(argc, argv)
从它的运行时启动代码,如果用户已经声明
int main(void)
只需忽略“额外”参数即可。(根据所使用的函数调用机制的细节,可能会也可能不会传递“额外”参数并悄悄忽略它们,而不会造成任何问题——但这种情况很常见。)
在您发布的代码中,main的声明完全不同:
int main(i)
这是一个“旧式”(K&R1) 函数定义,其中参数默认为 type int。所以这与
int main(int i)
但是不清楚为什么有人会尝试main使用这样的一个参数进行声明。这是非标准的,不能保证工作,而且没有充分的理由这样做。然而,如果您在运行时启动代码始终传递两个参数的平台上,并且额外的参数被悄悄无害地忽略,则此代码可能最终会argc在其i参数中接收。
正如评论中所建议的那样,如果您能够从命令行调用测试程序,或者以其他方式传递命令行参数,您可以尝试使用不同数量的命令行参数调用它,看看是否你会得到不同的结果。
1不传递命令行参数时得到的原因是被调用程序的名称通常作为 传递argv[0],因此argc几乎总是至少为 1。
但如前所述,这是非标准的,不能保证工作。它可以很容易地什么都不做,或者打印“Rumpelstiltskin!”,或者崩溃。