2017-10-16 35 views
4

我知道這是可能來連接一個定義的宏用於字符串像這樣配售定義兩個字符串文字

#define R "car" 
const char * s1 = "foo"R; //s1="foocar" 

但與宏時,我嘗試把這樣

#define R "car" 
const char * s1 = "foo"R"bar"; //compile-time error 
兩個字符串值之間 R

我得到一個編譯時錯誤error: stray 'R' in program。上面的第二個例子如何能夠實現s1 = "foocarbar"

+2

它似乎工作:https://ideone.com/7KMByV你可以添加一些關於編譯器和操作系統的信息來重現錯誤? – mch

+0

您是否也收到「錯誤:原始字符串分隔符無效的新行」? –

回答

4

C++有一個名爲「原始字符串文字」的功能,由字母R引入。

gcc顯然支持C語言中C++風格的原始字符串文字作爲擴展。如果您使用的宏名稱不是R,那麼您不會遇到此問題。

字符串文字連接不要求字符串文字相鄰。而不是這樣的:

#define R "car" 
const char * s1 = "foo"R"bar"; 

你可以寫:

#define R "car" 
const char * s1 = "foo" R "bar"; 

但是你原來的代碼是有效的C,如果你使用的選項,如-std=c11使GCC更近符合GCC應該接受它。

請注意,如果您爲宏使用除R以外的名稱,則不會有問題。