《C语言程序设计:现代方法(第2版)(K.N.King 著)》学习笔记五:C语言基本概念(4)

2.7 标识符


  1. 在编写程序时,需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符(identifier)。在C语言中,标识符可以含有字母、数字和下划线,但是必须以字母或者下划线开头。在C99中,标识符还可以使用某些“通用字符名”,这在以后的学习中会介绍。
  2. 这是合法标识符的一些示例:times10get_next_char_done
  3. 这是不合法标识符的一些示例:10times(以数字而不是字母或下划线开头)、get-next-char(包含了减号而不是下划线)。
  4. C语言是区分大小写的。也就是说,在标识符中C语言区别大写字母和小写字母。例如,这些标识符全是不同的:jobjoBjObjOBJobJoBJObJOB。这 8 个标识符可以同时使用,且每一个都有完全不同的意义。(看起来使人困惑!)除非标识符之间存在某种关联,否则明智的程序员会尽量使标识符看起来各不相同。
  5. 因为C语言是区分大小写的,许多程序员都会遵循在标识符中只使用小写字母的规范(宏命名除外)。为了使名字清晰,必要时还会插入下划线,例如 symbol_table
  6. 而另外一些程序员则避免使用下划线,他们的方法是把标识符中的每个单词用大写字母开头,例如 SymbolTable
  7. C语言对标识符的最大长度没有限制,所以不用担心使用较长的描述性名字。
  8. 下表中的所有关键字keyword)对C编译器而言都有着特殊的意义,因而这些关键字不能作为标识符来使用:
    《C语言程序设计:现代方法(第2版)(K.N.King 著)》学习笔记五:C语言基本概念(4)
  9. 因为C语言是区分大小写的,所以程序中出现的关键字必须严格按照表 2-1 所示的格式全部采用小写字母。(C99关键字 _Bool_Complex_Imaginary 例外。)标准库中函数(如 printf 函数)的名字也只能包含小写字母。
  10. 请注意有关标识符的其他限制。某些编译器把特定的标识符(如 asm) 视为附加关键字。属于标准库的标识符也是受限的。误使用这些名字可能会导致在编译或链接时发生错误。以下划线开头的标识符也是受限的。

2.8 C程序的书写规范


  1. 我们可以把C程序看成是一连串记号(token),即许多在不改变意思的基础上无法再分割的字符组。标识符和关键字都是记号,标点符号以及字符串字面量也都是记号。例如,语句 printf("Height: %d\n", height); 是由 7 个记号组成的:printf("Height: %d\n",height);。(其中第一个和第五个记号都是标识符,第三个记号是字符串字面量,而第二个、第四个、第六个和第七个记号都是标点符号。)
  2. 大多数情况下,程序中记号之间的空格数量没有严格要求。除非两个记号合并后会产生第三个记号,否则在一般情况下记号之间根本不需要留有间隔。
  3. 事实上,我们可以把整个 main 函数都放在一行中。但是,不能把整个程序写在一行内,因为每条预处理指令都要求独立成行。
  4. 但用这种方式压缩程序并不是个好主意。事实上,添加足够的空格和空行可以使程序更便于阅读和理解。幸运的是,C语言允许在记号之间插入任意数量的间隔,这些间隔可以是空格符、制表符和换行符。这一规则对于程序布局有如下积极意义:
  • 语句可以分开放在任意多行内。
  • 记号间的空格使我们更容易区分记号。基于这个原因,作者通常会在每个运算符的前后都放上一个空格。此外,作者还会在每个逗号后边放一个空格。某些程序员甚至在圆括号和其他标点符号的两边都加上空格。
  • 缩进有助于轻松识别程序嵌套。
  • 空行可以把程序划分成逻辑单元,从而使读者更容易辨别程序的结构。
  1. 还要注意一下记号 { 和记号 } 的放置方法:记号 { 放在了 main() 的下面,而与之匹配的记号 } 则放在了独立的一行中,并且与记号 { 排在同一列上。把记号 } 独立放在一行中可以便于在函数的末尾插入或删除语句,而将记号 } 与记号 { 排在一列上是为了便于找到 main 函数的结尾。
  2. 最后要注意的是:虽然可以在记号之间添加额外的空格,但是绝不能在记号内添加空格,因为这样做可能会改变程序的意思或者引发错误。尽管把空格加在字符串字面量中会改变字符串的意思,但这样做是允许的。然而,把换行符加进字符串中(换句话说,就是把字符串分裂成两行)却是非法的。把字符串从一行延续到下一行需要一种特殊的方法才可以实现。这种方法将在以后的章节中学到。