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