本章主要介绍 C++ 的大部分基本要素,如:内置类型、库类型、类类型、变量、表达式、语句和函数等,主要让读者能编写、编译和执行简单的 C++ 程序。有一定的 C 或 C++ 经验的读者可以略过。下面主要分析 main 函数的相关知识。
main 函数能写成 void main ()吗?
每个 C++ 程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。
定义 main 函数和定义其他函数一样。定义函数必须指定 4 个元素:返回类型、函数名、圆括号内的形参表(可能为空)和函数体。
main 函数的返回值必须是 int 型,该类型表示整数。 int 类型是内置类型,即该类型是由 C++ 语言定义的。
这里需要注意到的是 main 函数的返回值。关于 C 和 C++ 规范里 main 函数的返回值,需要注意到一下几点:
a. 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中( http://www2.research.att.com/~bs/bs_faq2.html#void-main )明确地写着 The definition void main( ) { /* …… */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。
b . 在 C99 标准中,只有以下两种定义方式是正确的。
其中的形参表可以做一些小的变动,如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。
在不需要从命令行中获得任何参数时,使用 int main (void) 。
如果 main 函数没有 return 语句,则 C99 规定编译器要自动在生成的目标文件中加入 return 0; 语句,表示程序正常退出。但建议我们应该在程序后自己添加 return 语句,养成良好的习惯。注意 VC6 就不会在目标文件中自动添加 return 语句。
c. 在 C++98 中定义了以下两种 main 函数的定义方式。
使用方法和规范与 C99 中基本一致。也可以在程序中省略 return 语句,编译器会自动添加该语句( VC6 同样不支持),但依然建议自己写上,养成好的习惯。
d. main 函数的返回值是用来说明程序的退出状态。返回值必须为 int 型,若为 0 ,则表示程序正常退出;若为其他数值则表示程序错误退出,一般有着特有的含义。
本文主要参考“C/C++ 误区一:void main() ” 以及 “Bjarne Stroustrup个人主页 ”相关内容。