pp-tokens还剩下哪些字符?

时间:2011-12-27 23:51:42

标签: c++ c-preprocessor language-lawyer

规范列出了pp令牌的类别为2.5,但包含最后一个类别

  

每个非白色空格字符不能是上述

之一

我很难找到一个示例,其中捕获这样一个字符的pp标记产生一个有效的C ++程序。如2.5解释的那样,程序可能包含一个狂野的"'令牌,但行为未定义。有没有有效程序的例子?

2 个答案:

答案 0 :(得分:1)

我认为$@属于该类别(假设这些字符位于源字符集中)。两者都是有效的pp令牌,但不是有效的令牌,并且将在后面的翻译阶段被诊断为语法错误(除非它们已被#if#ifdef等删除。)。

我不知道这种pp-token会产生有效令牌的任何情况。

答案 1 :(得分:1)

您可以将迷路标记串行化为有效性。其实;你已经在a previous question中做到了这一点!

杂散字符标记也可能出现在由条件编译跳过的组中,即

#if 0
@ \ ` €
#endif

请注意,在所有这些情况下,唯一的杂散字符标记是反斜杠,因为诸如\u0040的UCN不形成标识符,并且UCN是标识符中的特殊情况,并且仅反斜杠是“可以构成预处理令牌的最长字符序列,“u0040是一个单独的标识符。