我有一個函數在屏幕上顯示一個字符串。原型是dispStrFont(char* str, struct Font font, int x, int y, int color)
。C:連續的宏不起作用
但是,由於輸入字體很煩人,我做了一個宏#define dispStr(str, x, y, color) dispStrFont(str, normal_font, x, y, color)
。編譯時似乎工作正常(沒有錯誤)。
我的大部分琴絃都是黑色的,所以沒有必要輸入顏色。所以我使用另一個宏(放置在上面的宏之前)使顏色可選:#define dispStr(str, x, y) dispStr(str, x, y, 0)
。
這兩個宏的組合給出錯誤,我不知道爲什麼。
頭文件
#define dispStr(str, x, y) dispStr(str, x, y, 0)
#define dispStr(str, x, y, color) dispStrFont(str, normal_font, x, y, color)
//the define above gives me a warning: "Incompatible redefinition of macro "dispStr" (declared at line 1)"
主文件:
dispStr("test", x, y) //gives me an error, saying there's an illegal token ')'
//also gives me a warning "Too few arguments in macro invocation"
dispStr("test", x, y, 0) //compiles fine
爲什麼它的行爲呀?此外,當我評論第二個定義時,它不會給我那個括號錯誤(但由於它不識別dispStr
函數而不能明顯編譯),所以它是dispStr(str, x, y)
上導致錯誤的連續定義。
編輯:最後修改宏以刪除不必要的組合。所以define dispStr(str, x, y) dispStr(str, x, y, 0)
變成define dispStr(str, x, y) dispStrFont(str, normal_font, x, y, 0)
。我也必須把這個定義放在另一個之後,否則它由於某種原因仍然給我括號錯誤。
您是否嘗試切換訂單? –
如果我切換定義,它不起作用,因爲'dispStr(str,x,y)'被替換爲'dispStr(str,x,y,0)',但沒有被替換爲'dispStrFont'。 – Zezombye
哦,對。對不起,我有一個腦袋。 –