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!”,或者崩溃。


以上是C 中 int main() 的参数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>