簡體   English   中英

使用預處理器宏組成另一個宏調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM