C语言中#undef的含义

dat*_*ili 3 c++ c-preprocessor

我知道这意味着什么

#define M(B) (1U << ((sizeof(x) * CHAR_BIT) - B)) // CHAR_BIT=bits/byte
Run Code Online (Sandbox Code Playgroud)

但我不明白这个:

#undef M 
Run Code Online (Sandbox Code Playgroud)

在这之后会发生什么?M被清除或删除或?

Dea*_*ing 14

之后#undef,就好像这#define M...条线从未存在过一样.

int a = M(123); // error, M is undefined

#define M(B) (1U << ((sizeof(x) * CHAR_BIT) - B))

int b = M(123); // no error, M is defined

#undef M

int c = M(123); // error, M is undefined
Run Code Online (Sandbox Code Playgroud)

  • 这是#undef所做的很好的解释.但我想说#undef的最常见用法是与"#define DEBUG"等简单定义结合使用,而不是问题/示例中所示的宏定义.请记住,这些是预处理程序定义,不由编译器处理. (3认同)