pp标记还剩下哪些字符

What characters are left for pp-tokens?

本文关键字:字符 pp      更新时间:2023-10-16

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

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

之一

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

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

我不知道在任何情况下,这样的pp-token会产生一个有效的token

您可以将多余的令牌字符串化,使其有效。实际上;在之前的问题中你已经做到了!

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

#if 0
@  ` €
#endif

请注意,在所有这些情况下,唯一偏离的字符标记是反斜杠,因为UCN(如u0040)不构成标识符,UCN是标识符中的特殊情况,而反斜杠单独是"可以构成预处理标记的最长字符序列",u0040是一个单独的标识符。