void main(void)是否正确?

时间:2013-09-10 07:36:14

标签: c main

在他们使用的书中(不记得是哪一本):

void main(void)

在学校我学到了:

int main(void)

void main(void)实际上是否正确时是否任何情况?或者至少没有明确错误?

编辑: 根据C99提出的答案,这是不正确的。早期版本怎么样?是明确错误还是没有说出来?为什么C编译器不抱怨它?

3 个答案:

答案 0 :(得分:2)

永远不要使用void main(void)。这不标准。

始终使用

之一
int main(void);

int main();

int main(int argc, char **argv);

int main(int argc, char *argv[]);

这本书的最佳用途是用它来照亮冬天的第一场火。

答案 1 :(得分:2)

按照C标准

  

C99§5.1.2.2.1程序启动

     

程序启动时调用的函数名为main。该实现声明此函数没有原型。它应该用返回类型int定义,没有参数:

int main(void) { /* ... */ }
     

或有两个参数(这里称为argc和argv,但可能有任何名称   使用,因为它们是声明它们的函数的本地函数):

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

或等效; 10 或其他一些实现定义的方式。

     

10)因此,int可以被定义为int的typedef名称替换,或者argv的类型可以写为char **argv,依此类推。

关闭子句授予实现他们自己的恶习,也就是说,如果程序不遵循这个,它不再符合标准,而是依赖于实现的兼容性。如果您希望main()在任何地方工作,请按照其中一项进行操作,您就可以了。

答案 2 :(得分:0)

某些(所有?)C编译器允许

void main(void)。但是,无论如何都不应该使用它。因为至少在C99之后是不允许的。但是,我没有找到抱怨它的C编译器。

E.g。 void.c:

#include <stdio.h>
void main(void)
{
   printf("hello world");
}

gcc void.c

编译。 另请检查http://www.compileonline.com/compile_c_online.php

总之(尽管我没有找到参考文献):在最早的C版本中void main(void)可能不被禁止。

然而: 如果不指定返回值,您现在不会返回程序返回的内容。所以,标准与否,正确或错误,不要使用它,因为它会使你的程序不确定。