![](/img/trans.png)
[英]Is it undefined behavior to #define/#undef an identifier with special meaning?
[英]weird behavior of #undef
#include <iostream>
#define MY_CONST 10
#define MY_OTHER_CONST MY_CONST
#undef MY_CONST
int main() {
enum my_enum : int {
MY_CONST = 100
};
std::cout << MY_OTHER_CONST;
return 0;
}
我希望10
作為輸出,但這個程序輸出100
。 有人可以解釋這里發生了什么嗎?
#define MY_OTHER_CONST MY_CONST
將宏MY_OTHER_CONST
定義為具有MY_CONST
的替換列表。 定義宏時不執行替換。
在std::cout << MY_OTHER_CONST;
, MY_OTHER_CONST
被其替換列表替換,成為MY_CONST
。 此時,沒有MY_CONST
的宏定義,因此不再進行替換。 然后MY_CONST
引用enum
常量MY_CONST
,其值為 100。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.