main函数究竟应该怎么写?

在大多数程序语言里,程序由main函数开始执行,因此被称之为入口函数。然而,当你学了编程一段时间后,你肯定见过不止一种main函数的写法。你有木有想过,究竟那种写法才算是标准的呢?毕竟各个平台对编译器的实现有所不同,往往标准的部分是相同的。如果你的程序是按标准来写的,那意味着你的程序是跨平台的。在这篇文章,我们来谈谈c,c++里main函数该如何写。

标准C

那C99来说吧,标准规定main函数应该定义为返回int类型,且带有0个参数或2个参数,即如下形式:
int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }
或其他等价形式,如char *argv[]可以写成char **argv。说到这里,顺便提一下,argc指的是argument count,这个大家没有疑问。但argv有人说是argument values,其实是不对的,argv应该指argument vector(the vector term in this variable's name is used in traditional sense to refer to strings)。


当你看老版的c语言程序时,可能会看到
main()
这种写法。c90允许这么写,c99不允许了。以前这么写是表示默认返回int类型,而参数列表()表示接受任意个参数。现在我们坚决反对这种形式。

int返回类型的作用在于表明程序是如何退出的。0或 EXIT_SUCCESS  表示正常退出, EXIT_FAILURE表示非正常退出。stdlib.h中提供了这两个宏;两个参数分别表示字符串个数和字符串数组,举例:gcc -o a a.c,那么argc=4,argv分别是
argv[0]---------> "gcc"
argv[1]---------> "-o"
argv[2]---------> "a"
argv[3]---------> "a.c"
gcc通过解析这些参数,知道要编译a.c文件并生成一个名叫a的可执行程序。
你可以省略main的返回语句,默认将返回0

标准C++

标准c++11规定
1.一个程序应该包含一个叫main的全局函数
2.main函数不应该被重载,main必须返回int类型。所有的实现应允许以下两种写法
int main() { /* ... */ }
int main(int argc, char* argv[]) { /* ... */ }
3. The function  main  shall not be used within a program.
也就是你不应该在其他函数里调用main或者&main等操作。但是目前很多编译器好像是允许你去调用main的。
4.如果main省略了返回语句,那相当于return 0;

c++标准明确表示main应该返回int类型,因此返回void是没法通过编译的。

扩展

一般地,Uinx支持第三种扩展形式
int main(int argc, char **argv, char **envp) { ... }
Mac OS X还有
int main(int argc, char **argv, char **envp, char **apple);
【转载请注明出处: http://blog.csdn.net/booirror/article/details/12916555】

你可能感兴趣的:(C++,c,main)