簡體   English   中英

如何使用##運算符進行宏擴展的字符串或字符常量

[英]How to make string or char constants with macro expansion using ## operator

我正在嘗試執行以下操作:

#define mkstr(str) #str
#define cat(x,y) mkstr(x ## y)

int main()
{

   puts(cat(\,n));
   puts(cat(\,t))
   return 0;
}

兩個puts語句都會導致錯誤。 作為\\nn都是預處理程序標記我希望他們正確地輸出這些puts語句,但流血/ DEVC ++編譯器給我下面的錯誤:

24:1 G:\\ BIN \\ cLang \\ macro2.cpp粘貼“\\”和“n”不提供有效的預處理令牌

我失蹤的事實在哪里?

預處理器使用需要C-ish輸入的標記器。 因此,即使在進行字符串化時,也無法將隨機垃圾傳遞給宏。 ==>不要讓你的預處理器感到悲傷 - 如果你經常這樣做會吃小貓。

實際上,沒有辦法通過編譯時連接創建"\\n" ,因為"\\\\" "n"是由兩個文字組成的字符串,即“\\ n”。

暫無
暫無

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

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