#undef 在 C++ 中的含义
我知道这意味着什么
#define M(B) (1U << ((sizeof(x) * CHAR_BIT) - B)) // CHAR_BIT=bits/byte
,但我不太明白这一点:
#undef M
之后会发生什么? M被清除还是被删除了还是?
I know what this means
#define M(B) (1U << ((sizeof(x) * CHAR_BIT) - B)) // CHAR_BIT=bits/byte
but I don't understand well this one:
#undef M
after this what happens? M is cleared or deleted or?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在
#undef
之后,就好像#define M...
行从未存在过。After the
#undef
, it's as if the#define M...
line never existed.这是关于它的 MSDN 文章:
http://msdn.microsoft.com/en-us /library/ts4w8783(VS.80).aspx
我的理解是它删除了 M 的定义,以便它可以用来定义其他东西。
EG
使用起来似乎很令人困惑,但如果您需要使用其他人的宏,那么在实践中可能会出现这种情况。
Here is the MSDN article about it:
http://msdn.microsoft.com/en-us/library/ts4w8783(VS.80).aspx
My understanding is that it removes the definition of M so that it may be used to define something else.
E.G.
It seems like a confusing thing to use but may come up in practice if you need to work with someone else's macros.
#define 和#undef 是预处理器指令。
例如
#定义 M(X) 2*(X)
M(1);
#undef M
M(2)
因为是编译前的预处理器指令,所以预处理器将简单地替换源文件中的 #define M(X) 2*(X) 之后的指令。
M(1) 与 2 * 1
如果预处理器找到 #undef M,它将不再用
2 * 2 替换 M(2),因为当找到 #undef M 时,M 将被销毁。
如果想为现有宏提供另一个定义,通常使用#undef
#define and #undef are preprocessor directives.
E.g.
#define M(X) 2*(X)
M(1);
#undef M
M(2)
Because are preprocessor directives before compilation the preprocessor will simply replace after the #define M(X) 2*(X) in that source file.
M(1) with 2 * 1
if preprocessor finds #undef M it will not replace anymore
M(2) with 2 * 2 because M is destroyed when #undef M is found.
#undef is ussualy used if want to give another definition for an existing macro