
上QQ阅读APP看书,第一时间看更新
2.1 语法
从其整体结构来看,C程序是由不同类型的文本元素组成的,这些文本元素按照某种语法组合在一起。这些元素是:
- 特殊词语:在清单1.1中,我们使用了以下特殊的词语[1]:
#include
、int
、void
、double
、for
和return
。在本书的程序文本中,它们通常会以粗体字表示。这些特殊的词语代表了C语言所强加的、不可改变的概念和特性。 - 标点符号C:C使用几种标点符号来构造程序文本。
- 有5种括号:
{ ... }
,( ... )
,[ ... ]
,/* ... */
,< ... >
。括号将程序的某些部分组合在一起,并且总是成对出现。幸运的是,< ... >
括号在C中很少见,就像在我们的示例中一样,仅在同一逻辑行文本中使用。其他4种不限于在一行中,它们的内容可能跨越多行,就像我们在前面使用printf
时所做的那样。 - 有两个不同的分隔符或终止符:逗号和分号。当我们使用
printf
时,我们看到逗号将函数的4个参数分隔开。在第12行,我们看到逗号也可以跟在元素列表的最后一个元素的后面。

对于初学C语言的人来说,困难之一是使用相同的标点符号来表达不同的概念。例如,在清单1.1中,{}
和[]
对分别用于3个不同的目的[练习1]。
要点2.1 标点符号可以有几种不同的含义。
- 注释C:我们前面看到的结构
/* ... */
告诉编译器,其中的所有内容都是注释。例如,参见第5行:

编译器会忽略注释。它是解释和记录代码的最佳场所。这样的文档可以(也应该)极大地提高代码的可读性和可理解性。另一种形式的注释是所谓的C++风格的注释,如第15行所示。它们用//
标记。C++风格的注释从//
扩展到行尾。
- 字面量C:我们的程序包含几个引用固定值的项,这些固定值是程序的一部分:
0
、1
、3
、4
、5
、9.0
、2.9
、3.E+25
、.00007
和"element %zu is %g, \tits square is %g\n"
。这些被称为字面量C。 - 标识符C:这些是我们(或C标准)给程序中的某些实体的“名称”。这里有
A
、i
、main
、printf
、size_t
和EXIT_SUCCESS
。
标识符可以在程序中扮演不同的角色,但它们也可能指向其他一些东西。
- 数据对象C(如
A
和i
)。这些也被称为变量C。 - 类型C别名,如
size_t
,指定了一个新对象的“类别”,这里是i
。观察名称末尾的_t
。C标准使用这种命名约定来提醒你,标识符指向一个类型。 - 函数,例如
main
和printf
。 - 常量,例如
EXIT_SUCCESS
。
- 函数C:有两个标识符指向函数,分别是
main
和printf
。正如我们已经看到的,程序使用printf
来生成一些输出。然后定义Cmain
函数,也就是说,声明Cint main(void)
后面跟着一个包含在{ ... }
中的块C,它用来描述这个函数应该做什么。在我们的例子中,这个函数定义C的范围是第6行到第24行。main
在C程序中有一个特殊的角色,正如我们将看到的,它必须始终存在,因为它是程序执行的起点。 - 运算符C:在众多C运算符中,我们的程序只使用了几个。
=
用于初始化C和赋值C。<
用于比较。++
使变量递增(使其值增加1)。*
使两个值相乘。
就像在自然语言中一样,我们在这里看到的C程序的词法元素和语法必须与这些结构所表达的实际含义区分开来。然而,与自然语言不同的是,这种意义是严格规定的,通常没有产生歧义的余地。在下面的小节中,我们将深入探讨C所区分的三个主要语义类别:声明、定义和语句。
[1]在C jargon中,这些是指令C、关键字C和保留C标识符。
[练习1]找出这两种括号的3种不同用法。