2.1 进入 C++
一个简单的入门程序如下:
2.1.1 // mytirst.cpp – displays a message
C++注释以双斜杠(11)打头。注释是程序员为读者提供的说明,通常标识程序的一部分或解释代码的某个方面。编译器忽略注释,毕竟,它对 C++ 的了解至少和程序员一样,在任何情况下,它都不能理解注释。对编译器而言,程序就像没有注释一样。C++注释以 // 打头,到行尾结束。注释可以位于单独的一行上,也可以和代码位于同一行。在编写程序的过程中,应多使用注释來说明程序。程序越复杂,注释的价值越大。注释不仅有助于他人理解这些代码,也有助于程序员自己理解代码,特别是隔了一段时间没有接触该程序的情况下。
2.1.2 #include
分为两个部分来解释:#include 是一个预处理指令。C++ 和 C 一样,也使用一个预处理器,该程序在进行主编译之前对源文件进行处理(第1章介绍过,有些C++实现使用翻译器程序将C++程序转换为 C 程序。虽然翻译器也是一种预处理器,但这里不讨论这种预处理器,而只讨论这样的预处理器,即它处理名称以#开头的编译指令)。不必执行任何特殊的操作来调用该预处理器,它会在编译程序时自动运行。该编译指令导致预处理器将 iostream 文件的内容添加到程序中。这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本。 这样的文件叫做包含文件 (include file)由于它们被包含在其他文件中;也叫头文件 (header file) 由于它们被包含在文件起始处。C++ 编译器自带了很多头文件,每个头文件都支持一组特定的工具。C 语言的传统是,头文件使用扩展名 .h,将其作为一种通过名称标识文件类型的简单方式。例如,头文件 math.h 支持各种 C 语言数学函数,C++ 的用法变了。现在,对老式 C 的头文件保留了扩展名 .h (C++ 程序仍可以使用这种文件),而 C++ 头文件则没有扩展名。有些 C 头文件被转换为 C++ 头文件,这些文件被重新命名,去掉了扩展名 h(使之成为 C++ 风格的名称),并在文件名称前面加上前缀 c(表明来自 C 语言)。例如,C++ 版本的 math.h 为 cmath。有时 C 头文件的 C 版本和 C++ 版本相同,而有时候新版本做了一些修改。对于纯粹的 C 十头文件(如 iostream)来说,去掉 .h 不只是形式上的变化,没有 .h 的头文件也可以包含名称空间。本章的下一个主题,表2.1对头文件的命名约定进行了总结。
由于 C 使用不同的文件扩展名来表示不同文件类型,因此用一些特殊的扩展名(如.hpp或.hxx) 表示 C++ 头文件是有道理的,ANSIISO 委员会也这样认为。问题在于究竟使用哪种扩展名,因此最终他们一致同意不使用任何扩展名。
2.1.3 int main()
C++ 要求 main 函数的定义以函数头 int main() 开始。后面将详细讨论函数头语法,这里先简单预习一下。**int,**C++ 函数可以给调用函数返回一个值,这个值叫做返回值 (return value)。在这里,从关键字 int 可知,main 函数返回一个整数值。main,代表该函数的名字叫 main,这里之所以将程序中的函数命名为 main,原因是必须这样做。通常,C++ 程序必须包含名为 main 的函数(不是Main、MAIN 或 mian)。记住,大小写和拼写都要正确)。由于该程序只有一个函数,因此该函数必须担负起 main 的责任。在运行 C++ 程序时,通常从 main 函数开始执行。因此,如果没有 main 函数,程序将不完整,编译器将会报错指出未定义 main 函数。存在一些例外情况。例如,在 Windows 编程中,可以编写一个动态链接库 (DLL) 模块,这是其他 Windows 程序可以使用的代码。由于 DLL模块不是独立的程序,因此不需要 main 函数。(), C++ 函数在调用另一个函数时,可以将信息传递给该函数。空括号意味着 main 函数不接受任何信息,或者 main 不接受任何参数。简而言之,该函数名称是 main 函数可以给调用它的函数返回一个整数值,且不从调用它的函数那里获得任何信息。