簡體   English   中英

為什么回車符不被預處理器視為空白字符

[英]Why the carriage return character is not considered as a white space character by the preprocessor

在 C 標准的第6.4 Lexical elements6.4 Lexical elements中有寫

  1. ...預處理令牌可以用空格分隔; 這由注釋(稍后描述)或空白字符(空格、水平制表符、換行符、垂直制表符和換頁符)或兩者組成。

正如所見,回車符不包含在空白字符的概念中。

另一方面,在標准 C 函數isspace的描述中有寫( 7.4.1.10 The isspace function

  1. ...標准的空白字符如下:空格 ('')、換頁符 ('\\f')、換行符 ('\\n')、回車 ('\\r') 、水平制表符 ( '\\t') 和垂直制表符 ('\\v')。 在“C”語言環境中, isspace 僅對標准空白字符返回 true。

是否有意在描述預處理的部分中未提及回車符,如果是,原因是什么?

或者這只是標准的缺陷?

相同的問題適用於 C++ 標准。

參見N1570 5.2.1 第 3 段。

回車符是基本執行字符集的成員(並且它被isspace()視為空白字符),但它不是基本源字符集的一部分。

源和執行基本字符集都包括“空格字符,以及表示水平制表符、垂直制表符和換頁符的控制字符”。 另外,“在基本執行字符集中,應該有代表警告、退格、回車和換行的控制字符”。

在某些系統上,回車符是行尾指示的一部分; 任何此類指示都被視為單個換行符。 不是源文件中行尾指示符的一部分的回車字符會導致未定義的行為。

源文件輸入被翻譯成源字符集(標准第 5.1.1.2 節中的翻譯階段 1)。 源字符集在§5.2.1 中描述。

在 C.2011 中,§5.2.1¶3:

在源文件中,應該有某種方式來指示每行文本的結尾; 本國際標准將這樣的行尾指示符視為單個換行符。

裸回車不是源字符集的一部分。 如果它作為行終止序列的一部分出現,它會在 C 預處理器開始工作之前被翻譯成一個單獨的換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM