如何#define宏只对特定文件?

时间:2012-12-09 15:19:43

标签: c++

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

我担心一些“坏”用户在源文件之前包含了macro.h,而这些源文件一定不熟悉宏。

我该如何预防?

3 个答案:

答案 0 :(得分:2)

相当古老的问题,但我只是在寻找同样的东西,我对这里给出的答案不满意。我仍然不确定如何正确地执行它,但原则上应该可以使用#undef来定义仅在特定范围内定义的宏。例如。 :

#define MACRO 1

int a = MACRO;

#undef MACRO

int b = MACRO; // ERROR

答案 1 :(得分:1)

你做不到。如果它在macro.h中,并且该文件是公开的,则无法解决它。

一种常见的技术是有条件地定义宏:

#ifdef SOME_CONDITION
#define MY_MACRO
#endif

但“坏”用户也可以定义SOME_CONDITION

您应该做的是将公共标题与私有标题分开。正如您所说的那样,您想要隐藏的宏可能根本不应该在公共标题中。

答案 2 :(得分:0)

您无法控制宏的效果区域,特别是如果您将它放在.h中,它包含在任何地方。

如果您希望它只存在于几个.h和.cpp文件中,那么一个选项是(重新)在这些cpp文件的顶部定义它。您也可以将这些宏分离到自己的.h中,并将其仅包含在需要它的cpp文件中,而不是将其公开给代码的用户。

如果您想要更具体的答案,可能需要提供更具体的示例