我包含了需要某些支持处理器#define
的头文件,但是我不希望这会污染我的其余代码,例如:
// FOO may or may not already be defined here
#define FOO
#include "Bar.h"
#undef FOO
// FOO should be defined or not, as per the starting state
我正在思考:
#ifdef FOO
#define FOO_DEFINED
#endif
#define FOO
#include "Bar.h"
#ifndef FOO_DEFINED
#undef FOO
#else
#undef FOO_DEFINED
#endif
问题:
上述工作是否会将所有宏定义(或缺少)恢复到事先所处的状态?
是否有更简单的解决方案?
如果在我#define
时已经定义了FOO,这有关系吗?我应该添加另一个#ifndef
来防止这种情况吗?
答案 0 :(得分:1)
在你的例子中,Bar.h似乎只关心是否定义了FOO,而不关心绑定它的实际表达式。此外,如果其他人(我假设您的代码示例本身是在头文件中)定义了FOO并关心绑定到它的表达式,那么您不希望错误地使用空表达式重新定义FOO。如果是这样,您可能希望简化:
#ifndef FOO
#define FOO
#define UNDEF_FOO
#endif
#include "Bar.h"
#ifdef UNDEF_FOO
#undef FOO
#endif
答案 1 :(得分:1)