以下在 GCC 中給出了這個錯誤:粘貼“func_x”和“(”沒有給出有效的預處理令牌
#include <stdio.h>
#define LOG_FUNC(fname) printf( #fname " %d\n", fname ## ())
int func_x(){
return 0;
}
int main(){
LOG_FUNC(func_x);
return 0;
}
但是,當我將滑鼠懸停在函式頂部時,它顯示宏擴展為以下運算式,可以正常作業
printf("func_x" " %d\n", func_x())
是因為前處理器字串連接中不允許使用括號嗎?
uj5u.com熱心網友回復:
如果要編譯代碼,請更改LOG_FUNC為:
#define LOG_FUNC(fname) printf( #fname " %d\n", fname())
如果要將兩個字串連接在一起,只需將它們彼此相鄰寫入,用空格分隔。如果它們包含括號就可以了。您不必為此使用前處理器,但您可以:
#include <stdio.h>
#define MY_STR(f) f "(\n"
int main() {
puts(MY_STR("hi")); // outputs "hi("
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465484.html
上一篇:所以我試圖用一個從鏈表中添加/減去類的選單來制作ac程式......為什么這不起作用
下一篇:使用charstr[100]型別的引數并將其傳遞給較小的字串時,Gcc11 警告Wstringop-overflow
