宏定义冲突

joe*_*hao 5 c++ macros

我遇到了这个问题。这与宏函数无关,只是简单的字符串值宏替换。

我有两个头文件

test1.h
#define TEST 123
test2.h
#define TEST 456
Run Code Online (Sandbox Code Playgroud)

现在我有一个程序包含这两个标头,但我希望实际的 TEST 为 123。如何避免将 TEST 定义为 456?

你可能会认为我疯了,不简单地改变宏,但情况是:我有一个第三方解码器,它有这个宏(在test1.h中定义),并且还有另一个WINAPI宏(在test2.h中定义) )。这两个文件都是被别人控制的;我不应该改变他们中的任何一个。我根本不需要 test2.h,但我猜它已隐式包含在其他一些 WINAPI 标头中。

那么,有人可以告诉我如何解决这个问题吗?用我的第三方宏覆盖 WINAPI 宏?或者如何在我自己的代码中取消 WINAPI 标头中的定义?有没有办法指定我不想包含哪个标头。

小智 5

您可以使用#ifdef预处理器指令来确定是否TEST已针对您的特定情况进行了定义。或者只是#undef先这样。

#undef TEST
#define TEST 123
Run Code Online (Sandbox Code Playgroud)

将其放入头文件中您希望TEST为 123 而不是 456 的位置。此外,这需要位于test1.h.