簡體   English   中英

C ++預處理器字符串文字串聯

[英]C++ Preprocessor string literal concatenation

我發現這是關於C預處理器應如何處理字符串文字串聯(第6階段)。 但是,我找不到任何關於如何在C ++中處理它的東西(C ++是否使用C預處理器?)。

我問的原因是我有以下幾點:

const char * Foo::encoding = "\0" "1234567890\0abcdefg";

其中encoding是類Foo的靜態成員。 如果沒有連接的可用性,我就無法編寫那樣的字符序列。

const char * Foo::encoding = "\01234567890\0abcdefg";

由於解釋了\\012的方式,完全不同的東西。

我無法訪問多個平台,我很好奇我有多自信,以上總是處理正確 - 即我總是得到{ 0, '1', '2', '3', ... }

語言(C和C ++)沒有“預處理器”。 “預處理器”作為單獨的功能單元,是一個實現細節。 如果由所謂的翻譯階段定義,則處理源文件的方式。 C語言和C ++中的一個階段涉及連接字符串文字。

在C ++語言標准中,它在2.1中描述。 對於C ++(C ++ 03),它是第6階段

6連接相鄰的普通字符串文字標記。 相鄰的寬字符串文字標記是連接的。

是的,它將按照您的描述進行處理,因為它處於第5階段,

字符常量和字符串文字中的每個源字符集成員和轉義序列都將轉換為執行字符集的相應成員(C99§5.1.1.2/ 1)

C ++ 03中的語言實際上是相同的:

字符文字和字符串文字中的每個源字符集成員,轉義序列或通用字符名稱都將轉換為執行字符集的成員(C ++03§2.1/ 5)

因此,在第六階段連接字符串文字之前,轉義序列(如\\0 )將轉換為第五階段中執行字符集的成員。

由於C ++和C標准之間的一致性。 大多數(如果不是全部)C ++實現都使用C預處理器,所以是的,C ++使用C預處理器。

暫無
暫無

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

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