12

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

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

int main() {}

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

int main(void) {}

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

但是空虚又如何呢?我知道它与 C++ 中的含义不同(在 C 中,这意味着该函数的参数的数量和类型是未知的),但是我在 C 中看到了很多带有main声明定义的代码。

那么谁错了?

4

4 回答 4

10

In C, there's a difference between the declarations int main(); and int main(void); (the former declares a function with an unspecified number of arguments, and the latter is actually called a proto­type). However, in the function definition, both main() and main(void) define a function that takes no arguments.

The other signature, main(int, char**), is an alternative form. Conforming implementations must accept either form, but may also accept other implementation-defined signatures for main(). Any given program may of course only contain one single function called main.

于 2012-08-27T17:31:30.947 回答
3

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

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

另请阅读此链接以了解通用foo()foo(void)

于 2012-08-27T17:37:00.057 回答
2

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

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

于 2012-08-27T17:44:19.500 回答
1
   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.
于 2012-08-27T17:50:42.893 回答