我包括这需要一定的亲处理器#define
s到存在的头文件,但是我不希望这种污染我的代码如其他地区:定义一个宏,则取消定义它,如果它以前未定义
#ifdef FOO
#define FOO_DEFINED
#endif
#define FOO
#include "Bar.h"
#ifndef FOO_DEFINED
#undef FOO
#else
#undef FOO_DEFINED
#endif
问题:
// 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
我的线沿线的思维
上述工作是否将所有宏定义(或缺少)恢复到它们之前的状态?
有没有更简单的解决方案?
FOO是否已经被定义为I
#define
呢?我应该增加另一个#ifndef
来防止这种情况发生吗?
可能重复的[我可以重新定义一个C++宏,然后定义它?](http://stackoverflow.com/questions/1793800/can-i-redefine-ac-macro-then-define-it-返回) – Roddy 2013-03-05 20:22:48
@Roddy在这个问题上做的解决方案工作,如果宏最初是未定义的? – 2013-03-05 20:44:33
@MarkRansom:好的,对于gcc(也可能是msvc),接受的是:如果你推入并弹出一个未定义的宏,宏就会回到未定义状态。正如预期的那样,http://ideone.com/s2iVk8无法编译。 – Roddy 2013-03-05 21:50:37