C 中 int main() 的参数

Arguments of int main() in C

请解释以下程序的输出:

#include <stdio.h>
int main(i) {
    printf("i=%d\n",i);
    return 0;
}

输出: 我=1

在托管环境中,至少有两个 main 的有效签名:

int main(void)

int main(int, char **)

对于第二种形式,传统的参数名称是argcargv:

int main(int argc, char **argv)

如果它能逃脱惩罚,那么安排它总是最初调用的实现是合理的

main(argc, argv)

来自其 运行 时间启动代码,并且如果用户已声明

int main(void)

只忽略“额外”参数。 (根据所使用的函数调用机制的细节,可能会也可能不会传递“额外”参数并让它们被安静地忽略,而不会导致任何问题——但这种情况很常见。)

在您发布的代码中,main 的声明完全不同:

int main(i)

这是一个“旧式”(K&R1) 函数定义,其中参数默认类型为 int。所以这和

是一样的
int main(int i)

但不清楚为什么有人会尝试用这样的一个参数声明 main。它是非标准的,不能保证有效,也没有充分的理由这样做。然而,如果你在一个 运行 时间启动代码总是传递两个参数的平台上,并且额外的参数被安静且无害地忽略,那么这段代码可能最终会在它的 argc i参数。

正如评论中所建议的,如果您能够从命令行调用您的测试程序,或者以其他方式传递命令行参数,您可以尝试使用不同数量的命令行调用它参数,看看你是否得到不同的结果。

当你没有传递命令行参数时得到 1 的原因是被调用程序的名称通常作为 argv[0] 传递,所以 argc 几乎总是在至少 1.

但如前所述,这是非标准的,不能保证有效。它可以很容易地什么也不做,或者打印“Rumpelstiltskin!”,或者崩溃。