当前位置: C语言 -- 专题 -- 标记与预处理标记

标记与预处理标记

标记(token)是C程序编译步骤7、步骤8中最小的词汇元素,标记包括以下5个类别:

- 关键词(keyword

- 标识符(identifier

- 常量(constant

- 字符串字面量(string-literal

- 标点符号(punctuator


预处理标记(preprocessing-token)是C程序编译步骤3至步骤6中最小的词汇元素,预处理标记包括以下7个类别:

- 头文件名(header-name

- 标识符(identifier

- 预处理数(pp-number

- 字符常量(character-constant

- 字符串字面量(string-literal

- 标点符号(punctuator

- 不属于上述预处理标记类别的非空格字符(non-white-space character


编译步骤4会使用一种附加类别-位置标识(placemarkers),但该位置标识不会在源文件中出现。如果'或者"字符匹配预处理标记的最后一个类别,其行为是未定义的。

预处理标记可以使用空格进行分隔;空格由注释或者空格字符(空格字符包括空格符、水平制表符、换行符、垂直制表符、换页符。)组成,或者同时由两者组成。以下两个预处理指令都是合法的。

#define LENGTH/*长度*/10
#define WIDTH 5 /*宽度*/

将输入流解析成预处理标记时,预处理标记应为构成预处理标记的最长字符序列,例如:

A+++++B

将解释为++ ++ + B,而不是++ + ++ B;尽管前者是无效的C程序代码,而后者是有效的C程序代码。

上述规则有个例外:头文件名预处理标记仅在#include预处理指令内和#pragma指令实现定义的位置识别。这种情况下,如果字符序列可以解析为头文件名,也可以解析为字符串字面量,将作为头文件名处理。