打印宏的名稱如何在C或C++打印宏名 如:如何用C或C++
#define APINAME abc
#define PRINTAPI(x) printf("x")
我想打印PRINTAPI(APINAME),而不是 「ABC」
打印宏的名稱如何在C或C++打印宏名 如:如何用C或C++
#define APINAME abc
#define PRINTAPI(x) printf("x")
我想打印PRINTAPI(APINAME),而不是 「ABC」
宏是預處理器,並且在編譯代碼之前它們將被它們的相關語句替換。所以,你沒有機會在運行時擁有宏名稱。但是,你可以生成編譯時字符串名稱:
#define APINAME abc
#define PRINTAPI(x) std::cout << #x << std::endl;
int main()
{
PRINTAPI(APINAME);
}
輸出
APINAME
在宏操作#
使得輸入參數字符串文本(字符串化)
是的,它的工作原理,謝謝 – user1393608
由於宏在預處理程序正在執行工作時消失,這發生在編譯器被調用之前,編譯器將不會在源代碼中的任何地方存在APINAME
。唯一的解決方法是以某種其他方式想出兩者之間的某種聯繫,例如,
struct foo{
const char *name;
const char *val;
} myvar = { "APINAME", APINAME };
隨着宏,你可以做到這一點作爲一個班輪:
#define APINAME "abc"
#define APINAME_VAR(x, y) struct foo x = { #y, y }
APINAME_VAR(myvar, APINAME)
或
cout << "APINAME=" << APINAME << endl
printf("APINAME=%s\n", APINAME);
或者,在宏觀調控的情況下:
#define PRINTAPI printf("%s=%s\n", #APINAME, APINAME)
將打印APINAME=abc
print(「APINAME」) – Andrew
在C++編譯器看到它之前宏已經消失了。你究竟在努力完成什麼? – Collin
對於您編輯的問題,請參閱我編輯的答案。 –