C中main()的定义

时间:2012-08-27 17:26:28

标签: c

  

可能重复:
  Standard way to define parameter-less function main() in C

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

int main() {}

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

int main(void) {}

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

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

那谁错了?

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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

另请阅读此link,了解通用argv[argc] == NULLfoo()

之间的区别

答案 2 :(得分:2)

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

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

答案 3 :(得分: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.