gpt4 book ai didi

c++ - 如何解决宏和函数重名的问题?

转载 作者:太空狗 更新时间:2023-10-29 23:16:57 24 4
gpt4 key购买 nike

我正在使用 Visual C++ 2008 进行开发。在项目中,我需要包含两个由第三方提供的 header (例如一个是aaa.h,另一个是bbb.h)。

不幸的是,头文件 aaa.h 中有一个名为“Log()”的宏,头文件 bbb.h 中也有一个名为“Log()”的函数。

众所周知,如果源文件中头文件aaa.hbbb.h之前,那么在预编译过程中会展开函数,导致构建错误。现在,我必须在每个源文件中将 header aaa.h 放在 bbb.h 之后。但是有很多源文件需要包含这两个文件。如果我修改每个文件,将需要太多的努力。

实际上,我只需要在我的代码中使用宏。该功能对我的项目没用。但是header是第三方的,我没法修改。

你有更好的方法吗?

最佳答案

作为您可以创建的解决方法

// bbb_fixed.h

#if defined(Log)
# if defined(__GNUC__) || defined(_MSC_VER) // Maybe other compilers, maybe check version too
# pragma push_macro("Log")
# undef Log
# include "bbb.h"
# pragma pop_macro("Log")
# else
# undef Log
# include "bbb.h"

// Now restore manually Log macro:
# define Log // code from #include "aaa.h"

//# undef AAA_H // aaa.h include guards
//# #include "aaa.h"

#else // Lod undefined
# include "bbb.h"
#endif

并包含 bbb_fixed.h 而不是 bbb.h

但更好的办法是修复 header aaa.h 以不使用此类宏。

关于c++ - 如何解决宏和函数重名的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com