"\$"
等字符串是否非法?为什么或者为什么不? (Gcc和clang发出警告但是把它视为"$"
)\
如何跟着一个字符,后面带有反斜杠,不会形成应该表现的保留转义序列?
答案 0 :(得分:2)
来自this escape sequence reference:
如果反斜杠后跟任何未在此处列出的字符,则ISO C需要诊断。
因此需要编译器打印有关它的消息。
在快速阅读C11规范(INCITS + ISO + IEC + 9899-2011 [2012],遵循上述链接参考文献中的参考文献)后,我没有提及行为。虽然它可以在其他地方指定我怀疑它,所以未指定的转义序列的行为是,未指定。
答案 1 :(得分:2)
对于C11,n1570草案的(非规范性)说明是明确的。 6.4.4.4字符常量段将转义序列定义为:
转义序列:
- 简单转义序列
- 八进制转义序列
- 十六进制转义序列
- 通用字符名称
simple-escape-sequence:其中一个
- \' \" \? \
- \ a \ b \ f \ n \ r \ t \ v
八进制转义序列:
- \ octal-digit
- \ octal-digit octal-digit
- \ octal-digit octal-digit octal-digit
十六进制转义序列:
- \ x十六进制数字
- 十六进制 - 转义 - 序列十六进制数字
此处未定义\
之后的另一个字符的所有其他序列,因此当前标准
一张纸条说:
77)... 如果任何其他字符后跟反斜杠, 结果不是令牌,需要诊断。请参阅“未来的语言指示”(6.11.4)。
并且6.11.4说:
6.11.4字符转义序列
作为转义序列的小写字母保留用于将来的标准化。其他 字符可以在扩展名中使用。
通常,编译器发出必需的警告,但忽略多余的\
。它完全符合非小写字母,因为它可以是本地扩展名,但它可能会破坏C语言的未来版本中的小写字母,因为它明确地是保留功能