我包括這需要一定的親處理器#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