這不是我試圖創建宏,但這個比喻試圖創建一個自定義的日誌記錄功能,在的OBJ-C和C環境工作的說明了這一點:ObjC宏 - 我可以包含檢查是否在當前範圍內定義了一個變量嗎?
#define Log(_s, ...) do { \
/* obviously this won't work as written, */\
/* but it's what i'm trying to accomplish: */\
#if (self && _cmd) /* \
LogObjectiveC(_s, ##__VA_ARGS__); \
#else \
LogC(_s, ##__VA_ARGS__); \
#endif \
} while (0)
在這個例子中,我們正在嘗試合併兩個取決於它們被定義的位置的宏。 (LogObjectiveC
用於當一個OBJ-C方法內,並且LogC
使用C函數內部時。
是它的宏定義內的「隱藏」參數(self
和_cmd
)的存在可能檢查?
但是,即使你檢查是否'__func__'與'+'或開始(實際上沿@行Chuck的建議去) ' - [',你不能有條件地檢查'cmd'的值 - 如果該變量不在範圍內,你仍然會得到一個語法錯誤。 –