![C++入门很轻松(微课超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/983/44509983/b_44509983.jpg)
2.2 C++程序的结构
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P27_1496.jpg?sign=1739232669-I9DibVc2283VB1wKGHsT3cqpSN5f3EMM-0-fe588ad41bf29aa353a48920f2a7a04f)
微视频
C++程序中会包含头文件、命名空间、主函数、字符串常量、数据流等部分,这些都是C++程序中经常用到的。本节就来认识C++程序的结构。
2.2.1 第一个C++程序
开启神奇的C++学习之旅与学习其他语言程序一样,首先从一个简单的程序开始。
【实例2.1】编写程序(见第1.2.3节),在屏幕上输出Hello World!(源代码\ch02\2.1.txt)。
#include <iostream> using namespace std; int main() { cout << "Hello World!\n"; }
程序输出的结果如图2-1所示。
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P28_1559.jpg?sign=1739232669-RmDFAj7q3Gx0QcHpNYxYvFTvvkAQlfkq-0-53f86a46fe8aeb52e59b74bd8b07baaa)
图2-1 例2.1的程序运行结果
以上是一段输出Hello World的小程序。程序代码的第1行使用字符“#”(这是一个预处理标志,预处理表示该行代码要最先进行处理,所以要在编译代码前运行)开头,include是一个预处理指令,其后紧跟一对尖括号(< >),尖括号内是一个标准库;第2行表示使用命名空间std;从第3行开始到第6行结束是程序部分,入口函数main()是每个C++程序都需要有的,大括号({ })代表main()函数的函数体,在函数体内可以编写要执行的代码。
☆大牛提醒☆
C++程序代码中所有的字母、数字、括号及标点符号均为英文输入法状态下的半角字符,而不能输入中文输入法状态下的全角字符。如图2-2所示,末尾即为中文输入法状态下的分号,当程序运行时就会给出相应的错误提示。
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P28_1576.jpg?sign=1739232669-BxsFbLgEzAfnm0fC3Ql1ve7WpUDr1zNa-0-65f498eeedf34b5ddcdae56e149293e5)
图2-2 中文输入法下分号的编译错误提示
2.2.2 #include指令
C++程序中第一行带“#”的语句被称为宏定义或预编译指令,表示包含C/C++标准输入头文件。C++编译系统会根据头文件名把该文件的内容包含进来。
☆大牛提醒☆
在该C++语句中不要用" "代替< >来包含系统头文件,例如,#include "stdio.h"和#include "iostream"都是错误的示例。
Hello World程序中的第一行代码#include <iostream>就是为了说明要引用iostream文件内容,编译器在编译程序时会将iostream中的内容在#include <iostream>处展开。如果在编写程序时忘记包含iostream头文件,就会出现错误提示。例如,在编写Hello World程序时忘记包含iostream头文件,那么原来应输出Hello World的程序在编译时就会报错,如图2-3所示。在该图中可以发现,由于不包含这个头文件,很多相关的功能都是不能使用的。
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P29_1582.jpg?sign=1739232669-idUYEORHZ9CoRmEWNPhk6IgoZ1S80W1G-0-779e2ddc2fd466a0e709b65cc6dfebe0)
图2-3 忘记包含iostream头文件时的编译错误提示
2.2.3 iostream标准库
iostream(输入/输出流)是一个标准库。简单来讲,它的命名是由in和out的首字母与stream结合成的。它包含了众多的函数,每个函数都有其自身的作用。
提示:函数就是能够实现特定功能的程序模块。
如果在编写程序时没有包含iostream标准库文件,那么就不能使用cout输出语句了。因此,这里需要读者记住的是,必须使用#include <iostream>这条语句,才能在程序中使用与其相关的功能。
☆大牛提醒☆
如果在编程时忘记插入一对尖括号(< >)导致程序无法包含iostream文件,就会引起其他功能不能被使用,因此会出现如图2-4所示的错误提示。
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P29_1625.jpg?sign=1739232669-6QJNo5vuTzpSSVBzFJQqIxG0aqJBWXlp-0-0958e63543617b536db106b6e1e7923a)
图2-4 忘记插入尖括号时的编译错误提示
2.2.4 命名空间
C++中命名空间的目的是减少和避免命名冲突。所谓命名空间(namespace),是指标识符的各种可见范围。使用C++标准库中标识符的一种简便方法就是,在程序中添加如下语句。
using namespace std;
像上述语句这样命名空间std内定义的所有标识符都有效,所以在程序中我们可以使用cout输出字符串;如果没有这条语句,就只能像下面这样来书写输出字符串语句了。
std::cout << "Hello World!\n";
提示:“std::”是一个命名空间的标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以标准库中的函数或者对象都要用std来限定。
由于cout是我们经常用到的,因此在每个程序的开头加上一条“using namespace std;”是很有必要的。如果在输入“using namespace std;”时忘记添加分号,将会出现如图2-5所示的错误提示。
![](https://epubservercos.yuewen.com/0133F4/23721642901033906/epubprivate/OEBPS/Images/Figure-P30_1668.jpg?sign=1739232669-DF1NZedpXFhF5YtsJiSubOBmfEcWug7y-0-e7e2057b33e49db5e4e8eeb61a49c269)
图2-5 忘记添加分号的编译错误提示
2.2.5 函数main()
函数main()是程序的入口点,C++程序必须有且只能有一个函数main(),而不论其在程序中处于什么样的位置。C++程序从函数main()的第一条指令开始执行,直到函数main()结束,整个程序也将执行结束。
☆大牛提醒☆
并非所有C++程序都有传统的函数main()。用C或C++写成的Windows程序入口点函数称为WinMain(),而不是传统的函数main()。
函数main()下面“{}”中的内容是需要执行的内容,称为函数体。函数体是按代码的先后顺序执行的,写在前面的代码先执行,写在后面的代码后执行。代码“cout << "Hello World!\n";”表示通过输出流输出字符串“Hello World!”,双引号("")代表括起来的单词是字符串常量,cout表示输出流,“<<”表示将字符串传送到输出流中。
函数的返回值是用来判断函数执行情况及返回函数执行结果的,因此,不要将函数main()的返回类型定义为void(虽然有些编译器允许用户将其定义为viod,但这样不符合C++的语法标准),也不要将函数main()的返回类型int省略不写。例如,void main(){}和main(){}都是错误的示例。
2.2.6 关于注释
在C++中,注释是用来辅助程序员阅读程序的语言结构。它是一种程序礼仪,可以用来概括程序的算法、表达变量的意义或者阐明一段比较难懂的程序代码。注释不会增加可执行程序代码的长度,在代码生成以前编译器会将注释从程序中剔除掉。
C++中有两种注释符号:一种是注释对(/* */),与C语言中的一样,注释的开始用/*标记,编译器会把/*与*/之间的代码当作注释;另一种是双斜线(//),用来注释一个单行,程序行中注释符右边的内容都将被当作注释而被编译器忽略。例如:
/*Hello World.cpp*/ #include <iostream> //头文件引用 using namespace std; //命名空间 int main() //主函数 { cout << "Hello World!\n"; //执行输出字符串 }