欢迎来到本教程的第一章!
在这一节,我们首先会看看每个C 程序都会包含的东西。因为涉及的主题较少,我们只会做一个基本的了解,不会花大篇幅来介绍。这一小节的目标是帮助你理解基础的C 程序是如何构成的。在本节末尾,你将能够自己编写简单的程序。
在之后的章节中,我们会更详细的探讨这些方面,也会介绍建立在这些上面的新概念。
为了控制每个章节长度,主题可能会被拆分为多个后续课程。如果您觉得某些重要概念没有在课程中涉及,则可能会在下一课中涉及。
计算机程序是告诉计算机该做什么的指令序列。语句就是使程序执行某些操作的指令。
到目前为止,语句是C 程序中最常见的指令。这是因为它们是C 中最小的独立计算单元。在这方面,语句的行为很像自然语言中的句子。当我们要向另一个人传递想法时,我们一般会使用句子而不是随机的单词或者音节。在C 中,我们用语句来让程序做完成相应的功能。
大多数C 语句以分号结尾。如果某行以分号结尾,那它很可能是语句。
像C 的高级语言,里面的一条简单的语句可能会被编译成很多的机器指令。
高水平读者
C 中有很多不同种类的语句:
声明语句
跳转语句
表达式语句
复合语句
选择或者条件语句
迭代或者循环语句
try 块
在 C 中, 语句通常分成很多组,每个组称为函数。函数是按顺序执行语句的集合(从上到下依次执行)。当您学习编写自己的程序时,您将能够创建自己的函数并以任何您喜欢的方式混合和匹配语句(我们将在以后的课程中展示如何操作)。
Rule
每个 C 程序都必须有一个名为 main 的特殊函数(全部小写字母)。程序运行时,main里面的语句是按顺序执行的。
程序通常在函数main中的最后一条语句执行后终止(完成运行)(尽管在某些情况下程序可能会提前中止,或在之后进行一些清理)。
函数通常是为执行特定任务而编写的。例如,名为“max”的函数可能包含计算两个数字中哪一个较大的语句。名为“calculateGrade”的函数可以根据一组测试分数计算学生的分数。我们会很快讨论函数,因为它们是程序中最常用的组织工具。
作者注
在讨论函数时,在函数名的末尾附加一对括号是相当常见的简写。例如,如果您看到术语main()或doSomething(),这分别是名为 main 或 doSomething 的函数的缩写。这有助于将函数与具有名称的其他事物(如变量)区分开来,而无需每次都写“函数”一词。
现在,您应该对语句和函数的概念有了基本的了解,让我们回到 “Hello WOrld” 程序更具体的看一看每行的功能。
第1行是一种特殊类型的行,称为预处理器命令。此预处理器命令表示我们希望使用iostream库的内容,它是C 标准库的一部分,允许我们从控制台读写文本。我们需要这一行,以便在第5行中使用 std::cout。排除这一行将导致第5行的编译错误,否则编译器不会知道 std::cout 是什么。
第2行为空,编译器将忽略它。这一行的存在只是为了帮助使程序对人类更具可读性(通过分离#include预处理指令和程序的后续部分)。
第3行告诉编译器,我们将编写(定义)一个名为main的函数。如上所述,每个C 程序都必须有一个主函数,否则它将无法链接。
第4行和第7行告诉编译器哪些行是主函数的一部分。第4行的开始花括号和第7行的结束花括号之间的所有内容都被视为主函数的一部分。这称为函数体。
第5行是函数main中的第一条语句,也是我们运行程序时将执行的第一个语句。std::cout(代表“字符输出”)和<<运算符允许我们将字母或数字发送到控制台进行输出。在这种情况下,我们将发送文本“Hello world!”,其将被输出到控制台。此语句创建程序的可见输出。
第6行是返回语句。当可执行程序完成运行时,程序会将一个值发送回操作系统,以指示它是否成功运行。这个特殊的return语句将0的值返回给操作系统,这意味着“一切正常!”。这是程序中执行的最后一条语句。
我们编写的所有程序都将遵循此通用模板或其变体。
作者注
如果上述解释的部分(或全部)令人感到困惑,这是可以预见的。这只是快速浏览了每个部分。后续课程将深入探讨上述所有主题,并提供大量额外的解释和示例。
如果您编译和运行该程序,您将会在控制台看到以下结果。
当你在编译或者执行本程序时遇到错误,可以返回第 0.8 节查看。
在英语中,句子是根据你在学校英语课上学到的特定语法规则构造的。例如,正常句子以句号结尾。控制语言中句子结构的规则称为语法。如果你忘记了句点,同时连接两个句子,这违反了英语语法。
C 也有语法:关于程序必须如何构造才能被视为有效的规则。编译程序时,编译器负责确保程序遵循C 语言的基本语法。如果您违反了规则,编译器将在您尝试编译程序时发出投诉,并向您发出语法错误。
我们可以试一下如果省略第五行的分号会发生什么,像这样:
您可以尝试编译这个错误的程序。
Visual Studio 产生了如下错误信息(不同 IDE 产生的错误信息可能会有所不同):
这意味着第6行出现了语法错误:编译器在返回语句之前需要一个分号,但没有找到。虽然编译器会告诉您在遇到语法错误时它正在编译哪一行代码,但省略可能实际上在前一行。在本例中,错误实际上在第5行的末尾(编译器直到第6行才发现问题)。
编写程序时,语法错误很常见。幸运的是,它们通常很容易找到和修复,因为编译器通常会直接指向它们。只有在解决了所有语法错误后,程序的编译才会完成。
您可以尝试从“Hello world”程序中删除字符甚至整行,以查看生成的各种错误。尝试恢复第5行末尾缺少的分号,然后删除第1、3或4行,看看会发生什么。
以下测验是为了在加强您对上述材料的理解。
Q 1:什么是语句?
Q 2:什么是函数?
Q 3:所有程序都必须包含的函数叫什么?
Q 4:当程序开始运行时,从哪里开始执行?
Q 5:C 语句通常以什么标志结尾?
Q 6:什么是语法错误?
Q 7:什么是C 标准库?
(答案见本章最后一节)