我在Constant.h中定义了一个宏值(#define OK“OK”)
我在First.m文件中导入并重新定义它(#undef OK,#define OK“嗨”)
然后我在Second.m中包含Constant.h,当我访问“OK”时,值仍然是“OK”而不是“Hi”
我注意到只在First.m中更改了值。
只是想知道如何全局更改OK值。
由于许多.m文件正在进行,所以OK和OK需要根据不同的事件进行更改
由于
答案 0 :(得分: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
答案 1 :(得分:0)
您需要将OK
宏从简单的字符串定义转换为测试此特殊事件的条件语句。您只能更改正在编译的实现文件中的宏;其他编译单元中没有看到更改。因此必须对头文件本身中的宏进行更改。
例如,如果这两个字符串基于您可以执行的操作成功:
#define OK(condition) ((condition) ? @"OK" : @"Failed")
并像这样使用它:
BOOL success = [self doThing];
NSLog(@"doThing %@", OK(success));
我经常定义一个类似的宏来将BOOL
转换为NSString
s:
#define STRBOOL(b) ((b) ? @"YES" : @"NO"))