2016-11-29 28 views
0

字符串如"\$"是非法的嗎?爲什麼或者爲什麼不? (海灣合作委員會和鐺給出警告,但對待它,就好像它是"$"\如何後跟一個字符,與前面的反斜槓,不形成保留的轉義序列應該表現?轉義常規字符

回答

2

它在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語言中打破小寫字母,因爲它明確表示爲保留功能

2

this escape sequence reference

ISO C要求的診斷,如果反斜槓後跟此處未列出的任何字符。

所以需要編譯器打印關於它的消息。

在快速閱讀C11規範(INCITS + ISO + IEC + 9899-2011 [2012],參考上述鏈接參考文獻後),我沒有發現行爲。雖然可以在其他地方指定它,但我對此表示懷疑,所以未指定轉義序列的行爲沒有具體說明。