[英]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
語句都會導致錯誤。 作為\\n
和n
都是預處理程序標記我希望他們正確地輸出這些puts
語句,但流血/ DEVC ++編譯器給我下面的錯誤:
24:1 G:\\ BIN \\ cLang \\ macro2.cpp粘貼“\\”和“n”不提供有效的預處理令牌
我失蹤的事實在哪里?
預處理器使用需要C-ish輸入的標記器。 因此,即使在進行字符串化時,也無法將隨機垃圾傳遞給宏。 ==>不要讓你的預處理器感到悲傷 - 如果你經常這樣做會吃小貓。
實際上,沒有辦法通過編譯時連接創建"\\n"
,因為"\\\\" "n"
是由兩個文字組成的字符串,即“\\ n”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.