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.