更改宏值我已經定義在Constant.h宏值(#定義OK「OK」)從.m文件
而且我在First.m文件導入並重新定義它(和#undef OK,#定義OK「HI」)
然後我包括Constant.h在Second.m,當我訪問了「OK」的值仍然是「OK」而不是「你好」
我注意到值只改在First.m。
想知道如何更改全局OK值。
由於許多.m文件都acessing的確定和確定需求,往往根據不同的事件
感謝
更改宏值我已經定義在Constant.h宏值(#定義OK「OK」)從.m文件
而且我在First.m文件導入並重新定義它(和#undef OK,#定義OK「HI」)
然後我包括Constant.h在Second.m,當我訪問了「OK」的值仍然是「OK」而不是「你好」
我注意到值只改在First.m。
想知道如何更改全局OK值。
由於許多.m文件都acessing的確定和確定需求,往往根據不同的事件
感謝
#define OK(str) ISVALIDBOOL(str) ? @"HI" : @"OK"
#define ISVALIDBOOL(str) (str == NO) // Import in above header
BOOL str=YES;
NSLog(@"Hi:%@",OK(str));
str=NO;
NSLog(@"Ok:%@",OK(str));
沒有其他辦法更改宏在運行時改變 Refer that
您需要將OK
宏從一個簡單的字符串定義轉換爲一些條件語句,它測試這個特殊事件你說ab出。您只能更改正在編譯的實現文件中的宏;在其他編譯單元中看不到變化。所以必須對頭文件本身的宏進行更改。
例如,如果兩個字符串是基於操作的成功,你可以這樣做:
#define OK(condition) ((condition) ? @"OK" : @"Failed")
,並使用它像這樣:
BOOL success = [self doThing];
NSLog(@"doThing %@", OK(success));
我經常定義類似宏將BOOL
s變成NSString
s:
#define STRBOOL(b) ((b) ? @"YES" : @"NO"))