[英]Using preprocessor macros to compose another macro call
假設我有一個C ++預處理器宏定義如下:
#define X(s) std::cout << #s
如果我直接使用它:
int main() {
X( hello );
}
它按預期工作,並在控制台上打印“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
為什么我不能從兩個或多個宏擴展組成一個宏調用,不預處理器遞歸擴展它們?
為什么我不能從兩個或多個宏擴展組成一個宏調用,不預處理器遞歸擴展它們?
你可以編寫宏。 預處理器確實遞歸地擴展宏。
但是,它不會首先擴展宏寬度。 它首先擴展了它們的深度。
您遇到了問題,因為您希望預處理器首先擴展宏寬度。
您可以在16.3.4重新掃描和進一步替換 C ++ 11標准中閱讀有關遞歸宏擴展的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.