C++ 宏定义冲突
我遇到了这个问题。这与宏函数无关,只是简单的字符串值宏替换 我有两个头文件C++ 宏定义冲突,c++,macros,C++,Macros,我遇到了这个问题。这与宏函数无关,只是简单的字符串值宏替换 我有两个头文件 test1.h #define TEST 123 test2.h #define TEST 456 现在我有一个包含这两个标题的程序,但我希望我的实际测试是123。 如何避免将TEST定义为456 您可能认为我不简单地更改宏是疯了,但情况是:我有一个第三方解码器,它有这个宏(在test1.h中定义),还有另一个WINAPI宏(在test2.h中定义)。这两个文件都由其他人控制;我不应该改变他们中的任何一个。 我根本不需
test1.h
#define TEST 123
test2.h
#define TEST 456
现在我有一个包含这两个标题的程序,但我希望我的实际测试是123。
如何避免将TEST定义为456
您可能认为我不简单地更改宏是疯了,但情况是:我有一个第三方解码器,它有这个宏(在test1.h中定义),还有另一个WINAPI宏(在test2.h中定义)。这两个文件都由其他人控制;我不应该改变他们中的任何一个。
我根本不需要test2.h,但我想它是由其他WINAPI头隐式包含的
那么,谁能告诉我如何解决这个问题?要用我的第三方宏覆盖WINAPI宏?或者如何在我自己的代码中取消WINAPI头中的定义?有没有办法指定我不想包含的标题。您可以使用#ifdef
预处理器指令来确定是否已经为您的特定情况定义了测试。或者干脆先取消定义
#undef TEST
#define TEST 123
将它放在头文件中,您希望TEST
为123而不是456。此外,这需要在包含test2.h
之后和包含test1.h
之前进行。不过,这有点像黑客,因为您无法修复宏名称。如果将两个头都包含到文件中,则可以取消定义为:
#ifdef TEST
#undef TEST
#define TEST 123
#endif
//yourfile.cpp
#include "test2.h" //include this before test1.h
#undef TEST //this undefines the macro defined in test2.h
#include "test1.h" //now this defines a macro called TEST which you need
试试这个:
#include "test2.h"
#undef TEST
#include "test1.h"
首先包括test2,放弃它的测试,然后包括test1。在包含之后,您可以在代码中重新定义它。这将再次重新定义它,使它在需要它的任何地方都具有正确的值。否:\undef TEST
和\define TEST 123
就足够了。否:\undef TEST
和\define TEST 123
就足够了。它可以工作!谢谢你!我不知道有一个未定义的,现在我知道了。