2015-10-18 118 views
0

更改宏值我已經定義在Constant.h宏值(#定義OK「OK」)從.m文件

而且我在First.m文件導入並重新定義它(和#undef OK,#定義OK「HI」)

然後我包括Constant.h在Second.m,當我訪問了「OK」的值仍然是「OK」而不是「你好」

我注意到值只改在First.m。

想知道如何更改全局OK值。

由於許多.m文件都acessing的確定和確定需求,往往根據不同的事件

感謝

回答

1
#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

0

您需要將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"))