转义常规字符

问题描述:

字符串如"\$"是非法的吗?为什么或者为什么不? (海湾合作委员会和铛给出警告,但对待它,就好像它是"$"\如何后跟一个字符,与前面的反斜杠,不形成保留的转义序列应该表现?转义常规字符

它在C11草案的n1570草案(非规范性)中很明确。的6.4.4.4字符常数的段落定义逸出序列:

转义序列:

  • 简单转义序列
  • 八进制转义序列
  • 十六进制逃逸 - 序列
  • 通用字符名称

简单转义序列:中

  • \” \一个” \?\
  • \ A \ B \˚F\ n \ r \吨符\ v

八进制转义序列:

  • \八进制位
  • \ octal-八进制数字
  • \八进制,八进制,八进制数字

十六进制转义序列:

  • \ X十六进制数字
  • 十六进制转义序列十六进制数字

另一个字符的所有其他序列以下一个\这里没有定义,所以现行标准没有规定行为(未定义)

注曰:

77)...... 如果任何其它字符如下反斜线, 结果不是令牌和诊断需要。请参阅“将来的语言指导”(6.11.4)。

而且6.11.4说:作为转义序列被保留给未来的标准化

6.11.4字符转义序列

小写字母。其他 字符可用于扩展名。

通常,编译器发出所需的警告,但忽略多余的\。它对于非小写字母是完全符合的,因为它可以是本地扩展名,但它可能会在未来版本的C语言中打破小写字母,因为它明确表示为保留功能

this escape sequence reference

ISO C要求的诊断,如果反斜杠后跟此处未列出的任何字符。

所以需要编译器打印关于它的消息。

在快速阅读C11规范(INCITS + ISO + IEC + 9899-2011 [2012],参考上述链接参考文献后),我没有发现行为。虽然可以在其他地方指定它,但我对此表示怀疑,所以未指定转义序列的行为没有具体说明。