假設我有定義爲C++預處理器宏如下:使用預處理宏組成另一個宏調用
#define X(s) std::cout << #s
,如果我直接使用它:
int main() {
X(hello);
}
它的預期,「你好」的作品打印在控制檯上。
如果我定義調用它另一個宏:
#define Y X(hello)
#define X(s) std::cout << #s
int main() {
Y;
}
它仍然有效。
但是,如果我嘗試從兩個或多個不同的宏撰寫調用X
,我得到的錯誤的一大堆:
#define A X(
#define B hello
#define C)
#define X(s) std::cout << #s << '\n'
int main()
{
A B C;
}
在見輸出:http://cpp.sh/5ws5k
爲什麼我不能由兩個或多個宏擴展組成宏調用,預處理程序是否不會遞歸地擴展它們?
您應該閱讀描述[C++預處理程序](https://en.wikipedia.org/wiki/C_preprocessor)的文檔,可能是C++ 11或C99標準。它不會像你在做夢一樣。 –
我不知道你在這裏試圖實現什麼...... – Samer