C中main()的定义

可能重复:
在C中定义无参数函数main()的标准方法

我可以在C中使用函数main()声明定义,如下所示:

 int main() {} 

是的,我看到标准说只有两个保证支持的版本:

 int main(void) {} 

 int main(int argc, char* argv[]) {} 

但空洞的做法呢? 我知道它有另外的意义而不是在C ++中(在C中,它意味着这个函数的参数的数量和类型是未知的),但我在C中看到了很多带有main 声明定义的代码。

那谁错了?

在C中, 声明 int main();之间存在差异int main();int main(void); (前者声明一个具有未指定数量的参数的函数,后者实际上称为原型)。 但是,在函数定义中main()main(void)定义了一个不带参数的函数。

另一个签名main(int, char**)另一种forms。 符合实现必须接受任一forms,但也可以接受main()其他实现定义的签名。 任何给定的程序当然只能包含一个名为main函数。

int main()和这样的任何其他函数声明,它需要一个未知数量的参数,所以这对于main函数来说是绝对错误的。 int main(void)它不带参数。

char* argv[]arg ument v ector。 当您在命令行上编写参数时,您将在此向量字符串中找到参数。 有时你也可以找到char **argv但它是一样的。 括号[]是空的,因为我们不知道有多少参数来自用户; 为此目的存在int argc arg ument count:它计算argv有多少个参数(尽管列表以argv[argc] == NULL作为sentinel值终止)。

另请阅读此链接 ,了解genericsfoo()foo(void)之间的区别

如果实现显式地将int main() (没有参数)作为有效签名来记录,那么从C99开始一切都很好(§5.1.2.2.1¶1,“……或者其他一些实现定义的方式。”) 。

如果实现没有记录它,那么严格来说行为是未定义的(§4¶2),但是根据我的经验,导致行为与int main(void)显着不同的几率是相当低的。

  int main() {} this is the standard prior to the c99 standard of main method. int main(void){} this is the standard coined by ANSI. int main(int argc, char* argv[]) {} This is the another version of main which provides the user to pass the command line argument to the main method.