簡體   English   中英

當宏定義嵌套時會發生什么?

[英]What will happen when macro definitions are nested?

// main.cpp
#define a aa
#define aa a
int main()
{
    int a = 1;
    int aa = 11;
}

和上面的代碼一樣,宏定義是嵌套的。 最后是 a = 1 還是 a = 11?

C 2018 6.10.3.4 2 討論了在宏替換后重新掃描更多宏名稱並說:

如果在替換列表的掃描過程中發現了被替換的宏的名稱(不包括源文件預處理標記的 rest),則不會替換它。 此外,如果任何嵌套替換遇到被替換的宏的名稱,它不會被替換……

然后,當a被替換為aa時,重新掃描會找到aa並將其替換為a 然后重新掃描不會替換a ,因為它已經被替換了。

類似地,當aa被替換為a時,重新掃描會找到a並將其替換為aa 然后重新掃描不會替換aa ,因為它已經被替換了。

好吧,嘗試使用僅運行預處理器的gcc -E運行它。 它輸出以下預處理的 c 文件。

int main()
{
    int a = 1;
    int aa = 11;
}

這是所有#define的擴展。 顯然它會保持原樣,或者可能會進行有限數量的傳球。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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