什么可以用作 C/C++ 中 #define 指令的标识符
What can be used as an identifier for a #define directive in C/C++
我很好奇什么可以用作 C and/or C++ 中 #define 指令的标识符。每个字符串令牌都合法吗?
例如,下面的代码可以编译吗?
#define EMPTY ;;
for(EMPTY){
function();
}
规则与其他标识符大致相同。一些名称(例如,带有前导下划线后跟另一个下划线或大写字母的名称)保留用于实现。在 C++ 中,带有两个连续下划线(任何地方,不仅仅是开头)的名称也被保留。
C++(但不是 C)中的 #define
还有一个特定的附加条件:不允许重新定义保留字。所以像 EMPTY
这样的名字是可以的,但是像 for
或 auto
这样的名字就不行了。
变量名、函数名、goto 标签等常规标识符的句法规则与预处理器指令中使用的标识符相同。
C 标准对单词标识符有一个精确和唯一的定义,所以无论单词标识符出现在标准中的什么地方,都是一样的东西。
我很好奇什么可以用作 C and/or C++ 中 #define 指令的标识符。每个字符串令牌都合法吗?
例如,下面的代码可以编译吗?
#define EMPTY ;;
for(EMPTY){
function();
}
规则与其他标识符大致相同。一些名称(例如,带有前导下划线后跟另一个下划线或大写字母的名称)保留用于实现。在 C++ 中,带有两个连续下划线(任何地方,不仅仅是开头)的名称也被保留。
C++(但不是 C)中的 #define
还有一个特定的附加条件:不允许重新定义保留字。所以像 EMPTY
这样的名字是可以的,但是像 for
或 auto
这样的名字就不行了。
变量名、函数名、goto 标签等常规标识符的句法规则与预处理器指令中使用的标识符相同。
C 标准对单词标识符有一个精确和唯一的定义,所以无论单词标识符出现在标准中的什么地方,都是一样的东西。