《C语言程序设计:现代方法(第2版)(K.N.King 著)》学习笔记五:C语言基本概念(4)
分类:
文章
•
2024-12-23 23:09:16
2.7 标识符
- 在编写程序时,需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符(identifier)。在C语言中,标识符可以含有字母、数字和下划线,但是必须以字母或者下划线开头。在C99中,标识符还可以使用某些“通用字符名”,这在以后的学习中会介绍。
- 这是合法标识符的一些示例:
times10
、get_next_char
、_done
。
- 这是不合法标识符的一些示例:
10times
(以数字而不是字母或下划线开头)、get-next-char
(包含了减号而不是下划线)。
- C语言是区分大小写的。也就是说,在标识符中C语言区别大写字母和小写字母。例如,这些标识符全是不同的:
job
、joB
、jOb
、jOB
、Job
、JoB
、JOb
、JOB
。这 8 个标识符可以同时使用,且每一个都有完全不同的意义。(看起来使人困惑!)除非标识符之间存在某种关联,否则明智的程序员会尽量使标识符看起来各不相同。
- 因为C语言是区分大小写的,许多程序员都会遵循在标识符中只使用小写字母的规范(宏命名除外)。为了使名字清晰,必要时还会插入下划线,例如
symbol_table
。
- 而另外一些程序员则避免使用下划线,他们的方法是把标识符中的每个单词用大写字母开头,例如
SymbolTable
。
- C语言对标识符的最大长度没有限制,所以不用担心使用较长的描述性名字。
- 下表中的所有关键字(keyword)对C编译器而言都有着特殊的意义,因而这些关键字不能作为标识符来使用:
- 因为C语言是区分大小写的,所以程序中出现的关键字必须严格按照表 2-1 所示的格式全部采用小写字母。(C99关键字
_Bool
、_Complex
和 _Imaginary
例外。)标准库中函数(如 printf 函数)的名字也只能包含小写字母。
- 请注意有关标识符的其他限制。某些编译器把特定的标识符(如 asm) 视为附加关键字。属于标准库的标识符也是受限的。误使用这些名字可能会导致在编译或链接时发生错误。以下划线开头的标识符也是受限的。
2.8 C程序的书写规范
- 我们可以把C程序看成是一连串记号(token),即许多在不改变意思的基础上无法再分割的字符组。标识符和关键字都是记号,标点符号以及字符串字面量也都是记号。例如,语句
printf("Height: %d\n", height);
是由 7 个记号组成的:printf
、(
、"Height: %d\n"
、,
、height
、)
、;
。(其中第一个和第五个记号都是标识符,第三个记号是字符串字面量,而第二个、第四个、第六个和第七个记号都是标点符号。)
- 大多数情况下,程序中记号之间的空格数量没有严格要求。除非两个记号合并后会产生第三个记号,否则在一般情况下记号之间根本不需要留有间隔。
- 事实上,我们可以把整个 main 函数都放在一行中。但是,不能把整个程序写在一行内,因为每条预处理指令都要求独立成行。
- 但用这种方式压缩程序并不是个好主意。事实上,添加足够的空格和空行可以使程序更便于阅读和理解。幸运的是,C语言允许在记号之间插入任意数量的间隔,这些间隔可以是空格符、制表符和换行符。这一规则对于程序布局有如下积极意义:
- 语句可以分开放在任意多行内。
-
记号间的空格使我们更容易区分记号。基于这个原因,作者通常会在每个运算符的前后都放上一个空格。此外,作者还会在每个逗号后边放一个空格。某些程序员甚至在圆括号和其他标点符号的两边都加上空格。
- 缩进有助于轻松识别程序嵌套。
- 空行可以把程序划分成逻辑单元,从而使读者更容易辨别程序的结构。
- 还要注意一下记号
{
和记号 }
的放置方法:记号 {
放在了 main() 的下面,而与之匹配的记号 }
则放在了独立的一行中,并且与记号 {
排在同一列上。把记号 }
独立放在一行中可以便于在函数的末尾插入或删除语句,而将记号 }
与记号 {
排在一列上是为了便于找到 main 函数的结尾。
- 最后要注意的是:虽然可以在记号之间添加额外的空格,但是绝不能在记号内添加空格,因为这样做可能会改变程序的意思或者引发错误。尽管把空格加在字符串字面量中会改变字符串的意思,但这样做是允许的。然而,把换行符加进字符串中(换句话说,就是把字符串分裂成两行)却是非法的。把字符串从一行延续到下一行需要一种特殊的方法才可以实现。这种方法将在以后的章节中学到。