我在macro.h中定义了一个特殊的宏,但是我希望它仅在我的部分源文件(h / cpp)中有效, 我怎么能这样做?
我担心一些“坏”用户在源文件之前包含了macro.h,而这些源文件一定不熟悉宏。
我该如何预防?
答案 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文件中,而不是将其公开给代码的用户。
如果您想要更具体的答案,可能需要提供更具体的示例