在各种参考书上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标准官方文档给出的定义如下:
可见上述写法的第四种和第五种是有官方文档支持的。
在C中,int main()和int main(void)均表示main函数不接受任何参数,但实际上这两种写法是不等价的。前者表示参数列表为空,并且没有定义参数数量。对于第一种写法,C89的标准下是可以的,C99的标准却不允许这样写。因此,应尽量把main函数写成上述文档规定的两种形式。
而C++的官方文档则支持int main()的写法:
void main()表示main函数没有返回值,这种写法在任何标准之下都是错误的,没有任何标准支持。这种写法在新一点的编译器上都会直接报错,甚至有人将这种写法作为检验编译器好坏的标准。因此,应完全避免这种写法。
而第五、六种写法实际上是等价的,它们均表示接受argc个参数,argv中则存放指向参数变量的指针。若要对main函数传递参数,应采用这种写法。
而Linux和UNIX中的标准写法为int main(int argc, char *argv[], char *env[]),
env[ ]的每一个元素都包含ENVVAR=value形式的字符。
最后的return 0倒不是必须的,main函数如果没有指定返回值,则自动返回0。不过考虑到程序的兼容性、易读性等问题,还是加上为妙。
发表回复