除pp-number外,有效预处理标记却无效标记的典型示例及相关疑问
问题解答
1. 除pp-number实例外,典型的有效预处理标记但无效标记的例子
以下是几种常见情况:
- 预处理专用符号:比如
#、##,它们是合法的预处理标记(用于宏定义中的字符串化、token拼接),但不属于C语言的普通标记集合,无法作为有效标记用在非预处理代码中。 - 多字符字符常量:比如
'abcd',这是有效的预处理标记,但C语言的普通字符常量要求只能包含单个字符(或转义序列),因此它属于无效标记。 - 头文件名标记:比如
<stdio.h>或"myheader.h",这类是预处理阶段特有的标记,仅用于#include指令中,不属于普通标记的范畴,无法作为有效标记出现在其他代码位置。
2. 额外问题:所有标记均为有效预处理标记吗?
这个说法是正确的,不存在无法通过“预处理标记=>标记”转换得到的有效标记。
原因是:C语言的所有普通标记(包括标识符、关键字、数值常量、字符/字符串常量、运算符、标点符号),本质上都属于预处理标记的子集——比如关键字属于标识符类预处理标记,数值常量对应pp-number或常量类预处理标记,运算符对应单个/双字符的预处理标记。所有合法的普通标记,在预处理阶段都会被识别为对应的预处理标记,因此不存在无法从预处理标记转换而来的有效标记。
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

