从.m文件更改宏值

时间:2015-10-18 06:34:45

标签: objective-c xcode

我在Constant.h中定义了一个宏值(#define OK“OK”)

我在First.m文件中导入并重新定义它(#undef OK,#define OK“嗨”)

然后我在Second.m中包含Constant.h,当我访问“OK”时,值仍然是“OK”而不是“Hi”

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

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

由于许多.m文件正在进行,所以OK和OK需要根据不同的事件进行更改

由于

2 个答案:

答案 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"))