我在macro.h中定义了一个特殊的宏,但我希望它仅在部分源文件(h/cpp)中有效,
我怎样才能做到这一点?

恐怕某些“不良”用户必须在不熟悉宏的源文件之前包含macro.h。

我该如何预防呢?

最佳答案

通过使用#undef,可以使宏仅在文件范围内定义。例如。 :

#define MACRO 1

int a = MACRO;

#undef MACRO

int b = MACRO; // ERROR

但是,除非您依赖包含的顺序,否则这在文件中不起作用,这将是不好的。

如果要在源代码中使用在macro.h中定义的宏,则可以使用第二个unmacro.h并将其包括在源代码的末尾:
 // foo.cpp
 // other includes
 #include "macro.h"
 // no other includes!

 // contents of the source

 #include "unmacro.h"

但是,我不推荐这样做,因为它容易出错。最好重新考虑是否需要使用宏。在现代C++中,它们的有效用法极为罕见。

关于c++ - 如何仅将宏定义为特定文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13788722/

10-11 16:57