TCreopargh
书山有路搞为径,学海无涯机作舟。
乱搭的站
C和C++中main函数的写法

在各种参考书上C和C++中main函数的写法可谓五花八门,常见的写法有以下几种:

1
2
3
4
5
6
main()
int main()
void main()
int main(void)
int main(int argc, char *argv[])
int main(int argc, char **argv)

要找出“真正正确”的写法,其实看官方文档就可以了。

C99/11标准官方文档给出的定义如下:

https://blog.tcreopargh.xyz/wp-content/uploads/2018/10/cmain-1.png
C99官方文档的main函数定义

可见上述写法的第四种和第五种是有官方文档支持的。

在C中,int main()和int main(void)均表示main函数不接受任何参数,但实际上这两种写法是不等价的。前者表示参数列表为空,并且没有定义参数数量。对于第一种写法,C89的标准下是可以的,C99的标准却不允许这样写。因此,应尽量把main函数写成上述文档规定的两种形式。

而C++的官方文档则支持int main()的写法:

https://blog.tcreopargh.xyz/wp-content/uploads/2018/10/捕333获.png
C++官方文档的main函数定义

void main()表示main函数没有返回值,这种写法在任何标准之下都是错误的,没有任何标准支持。这种写法在新一点的编译器上都会直接报错,甚至有人将这种写法作为检验编译器好坏的标准。因此,应完全避免这种写法。

而第五、六种写法实际上是等价的,它们均表示接受argc个参数,argv中则存放指向参数变量的指针。若要对main函数传递参数,应采用这种写法。

而Linux和UNIX中的标准写法为int main(int argc, char *argv[], char *env[]),
env[ ]的每一个元素都包含ENVVAR=value形式的字符。

最后的return 0倒不是必须的,main函数如果没有指定返回值,则自动返回0。不过考虑到程序的兼容性、易读性等问题,还是加上为妙。

赞赏

发表评论

textsms
account_circle
email

乱搭的站

C和C++中main函数的写法
在各种参考书上C和C++中main函数的写法可谓五花八门,常见的写法有以下几种: main() int main() void main() int main(void) int main(int argc, char *argv[]) int main(int argc, …
扫描二维码继续阅读
2018-10-22