1-1 语句与程序结构
章节导言
欢迎来到本C++教程的第一章!
本章将初步介绍若干对每个C++程序都至关重要的主题。由于涉及内容较多,我们将以较为浅显的方式覆盖大部分内容(仅够入门)。本章旨在帮助您理解基础C++程序的构建方式。完成本章学习后,您将能够编写自己的简单程序。
后续章节将重新梳理这些主题并深入探讨,同时引入基于这些基础的新概念。
为控制单课时长度,部分主题可能拆分至后续课时讲解。若您发现重要概念未在当前课时覆盖,或存在未解答的疑问,这些内容很可能将在下课时展开。
语句
计算机程序是由一系列指令组成的序列,用于告知计算机执行特定操作。语句statement作为指令的一种类型,能促使程序执行某些动作。
在C++程序中,语句是最常见的指令类型。这是因为它们是C++语言中最小的独立计算单元。从这个角度看,它们的作用类似于自然语言中的句子。当我们向他人传达想法时,通常会用句子(而非随机词语或音节)来表达。在C++中,当我们希望程序执行某项操作时,通常会编写语句。
C++中大多数(但非全部)语句以分号结尾。若某行以分号结束,则很可能是语句。
在C++这类高级语言中,单个语句编译后可能生成多条机器语言指令。
面向高级读者的说明:
C++ 中存在多种不同的语句类型:
- 声明语句
- 跳转语句
- 表达式语句
- 复合语句
- 选择语句(条件语句)
- 迭代语句(循环语句)
- try 代码块
完成本教程系列的学习后,您将全面掌握这些语句的本质!
函数与主函数
在C++中,语句通常被组合成称为函数的单元。函数是一组按顺序(从上到下依次执行)执行的语句集合。随着你学习编写自己的程序,你将能够创建自己的函数,并随心所欲地组合各种语句(我们将在后续课程中展示具体方法)。
规则:
每个C++程序都必须包含一个名为main(全部为小写字母)的特殊函数。
当程序运行时,main函数内部的语句会按顺序执行。
程序通常在main函数内的最后一条语句执行完毕后终止(结束运行),尽管某些情况下程序可能提前中止,或在后续执行清理操作。
函数通常用于完成特定任务或执行有用操作。例如:名为 max 的函数可能包含比较两个数值大小的语句;名为 calculateGrade 的函数可根据考试分数计算学生成绩;名为 printEmployee 的函数则能将员工信息输出至控制台。我们将深入探讨函数机制——作为程序中最常用的组织工具,它们在后续内容中占据重要地位。
命名法:
在讨论函数时,在函数名末尾添加一组括号是一种常见的简写方式。例如,当你看到 main() 或 doSomething() 这样的术语时,它们分别代表名为 main 或 doSomething 的函数。这种写法有助于区分函数与其他命名实体(如变量),而无需每次都写明“函数”二字。
在编程中,函数(或对象、类型、模板等)的名称称为其标识符identifier。
字符与文本
最早的计算机主要设计用于数学计算和数据处理。随着硬件改进、网络普及以及消费类软件的发展,计算机也逐渐成为书面交流的重要工具。
在书面语言中,字符是交流的最基本单位。简而言之,字符character即书面符号或标记,例如字母、数字、标点符号或数学符号。当我们在键盘上按下字母或数字键时,就会生成一个字符,该字符随后可显示在屏幕上。以下均为字符:a、2、$、=。
在许多情况下,例如书写单词或句子时,我们需要使用多个字符。字符序列称为文本text(在编程语境中也称为字符串string)。
术语:
传统上,“文本”一词也指纯文本plain text,即仅包含标准键盘上出现的字符、不带任何特殊格式或样式的文本。例如,纯文本无法表示加粗的单词,因为这需要样式设置。我们的C++程序以纯文本形式编写。
进阶读者须知
计算机还存在另一类特殊字符,称为“控制字符control character”。这类字符对计算机系统具有特殊含义,但要么不被设计为显示内容,要么显示时呈现为单个可见符号之外的其他形式。常见的控制字符包括:- 转义符escape(不显示任何内容)- 制表符tab(显示为若干个空格)- 退格符backspace(删除前一个字符)
相关内容:
我们在第1.5课——iostream入门:cout、cin和endl 中讨论了字符和文本的输出。
我们在第4.11课——字符 中更详细地讨论了字符(包括控制字符)。
剖析Hello world!
既然你已经对语句和函数有了初步了解,让我们回到“Hello world”程序,从高层次上更详细地看看每行代码的作用。
#include <iostream>
int main()
{
std::cout << "Hello world!";
return 0;
}
第1行是一种特殊的行,称为预处理器指令。这个#include预处理器指令表明我们希望使用iostream库的内容,该库是C++标准库的一部分,允许我们从控制台读取和向控制台写入文本。此行是为支持第5行使用std::cout而必需的。若省略此行,编译器将无法识别std::cout,导致第5行编译报错。
第2行为空白行,会被编译器忽略。该行仅为提升程序可读性而存在(通过将#include预处理指令与后续代码分隔开)。
第3行告知编译器我们将定义名为main的函数。如前所述,每个C++程序必须包含main函数,否则链接将失败。该函数将返回类型为int(整型)的值。
第4行和第7行向编译器标明主函数的范围。第4行左大括号至第7行右大括号之间的所有内容均属于主函数主体。
第5行是main函数内的首条语句,也是程序运行时执行的第一条指令。std::cout(代表“字符输出”)配合<<运算符可在控制台显示信息。此处输出文本“Hello world!”,该语句构成了程序的可见输出。
第6行是返回语句。可执行程序运行完毕时,需向操作系统返回值以表明运行结果。此处返回整数值0,表示“一切正常!”。这是程序中最后执行的语句。
我们编写的程序都将遵循此通用模板或其变体。
作者注:
若上述说明的部分(或全部)内容令您感到困惑,这在当前阶段实属正常。本文仅旨在提供简要概述,后续课程将深入探讨所有相关主题,并辅以大量补充说明与实例。
你可以自己编译并运行这个程序,你会看到它在控制台输出以下内容:
Hello world!
若在编译或运行本程序时遇到问题,请查阅第0.8课——若干常见C++问题。
语法与语法错误
英语中的句子构造遵循特定语法规则,这些规则你可能在学校英语课上学过。例如,书面语中正常句子以句号结尾。描述特定词语(及标点符号)如何排列才能构成有效句子的规则体系称为语法syntax。例如,“My house painted is blue”构成语法错误,因为词序不符合常规。“All your base are belong to us!”(所有基地都归我们所有!)是另一个著名的语法错误示例。
C++编程语言同样拥有语法规则,规定程序元素的书写与排列方式以确保程序有效。编译程序时,编译器负责检查程序是否遵循这些语法规则。若程序操作偏离语言语法规范,编译器将终止编译并报出_语法错误_。
与允许大量歧义的英语不同,C++的语法规则被严格定义并强制执行。语法错误很常见。所幸这类错误通常容易定位和修复,因为编译器通常会直接指出问题所在。只有在所有语法错误都得到解决后,程序的编译才会完成。
由于大多数语句的语法要求以分号结尾,让我们看看如果在“Hello world”程序的第5行省略分号会发生什么:
#include <iostream>
int main()
{
std::cout << "Hello world!"
return 0;
}
请随意自行编译这个格式错误的程序。
使用Clang编译时,会生成以下错误信息:
prog.cc:5:31: error: expected ';' after expression

Clang 提示我们在第 5 行第 31 个字符处,语法规则要求使用分号,但我们未提供分号。因此编译因错误而中断。
当使用 Visual Studio 编译时,编译器会产生以下编译错误:
c:\vcprojects\hello.cpp(6): error C2143: syntax error : missing ';' before 'return'
请注意,Visual Studio 指出错误出现在第 6 行(而非第 5 行)。那么谁是对的?某种程度上两者都正确。
Clang 知道我们通常在语句末尾添加分号,因此它基于此假设报告错误出现在第 5 行。Visual Studio则选择报告编译过程中发现错误的实际行号(即第6行,此时遇到return语句而非预期的分号)。
关键要点:
编译器有时会将错误报告在我们惯常修复问题的行号之后。若在指定行号找不到错误,请检查前一行。
要观察其他不同的错误信息,可尝试从“Hello world”程序中删除字符甚至整行代码。也可尝试在第5行末尾恢复缺失的分号,然后删除第1、3或4行,观察系统如何响应。
测验时间
以下测验旨在巩固您对上述内容的理解。
问题 #1
什么是语句?
显示答案
语句是计算机程序中的一条指令,用于告诉计算机执行某项操作。
问题 #2
什么是函数?
显示答案
函数是一组按顺序执行的语句集合。
问题 #3
所有程序都必须包含的函数名称是什么?
显示答案
main
问题 #4
程序运行时会发生什么?
显示答案
main()函数内部的语句按顺序执行。
问题 #5
C++ 语句通常以什么符号结尾?
显示答案
分号(;)
问题 #6
什么是语法错误?
显示答案
当程序违反C++语言的语法规则时,就会发生语法错误。
问题 #7
什么是 C++ 标准库?
显示提示
提示:复习第0.5课——编译器、链接器和库的介绍
显示答案
库文件是一组预编译代码的集合,这些代码经过“打包”以便在其他程序中重复使用。C++标准库是随C++语言附带的库,它包含可在程序中使用的附加功能。

浙公网安备 33010602011771号