Objective-C调用中的macrosisEqualToString:产生关于无效标记的错误
我试图定义一个这样的macros:
#define SOME_DEF [[TTys getString] isEqualToString:ANOTHER_STRING]
然后执行以下操作:
#if SOME_DEF ... #endif
-
[TTys getString]
返回一个NSString -
ANOTHER_STRING
在前面定义为#define ANOTHER_STRING "hello"
在#if SOME_DEF
行上出现以下错误:
预处理器expression式开始处的标记无效
基于这个SO问题,这可能是由编译时无法解决的问题引起的,但是我已经定义了一切。 我怀疑是isEqualToString
方法,但我不知道另一种方法来做到这一点。
当您编写#if SOME_DEF
,预处理器将其parsing为:
#if [[TTys getString] isEqualToString:ANOTHER_STRING]
这不是#if
预处理器指令的有效条件:
'#if'指令允许你testing算术expression式的值,而不是仅仅存在一个macros。 它的语法是
#if expression controlled text #endif /* expression */
expression式是整数types的Cexpression式,受到严格的限制。 它可能包含
- 整型常量。
- 字符常量,它们将被解释为在正常代码中。
- 加法,减法,乘法,除法,按位运算,移位,比较和逻辑运算(&&和||)的算术运算符。 后两者服从标准C的通常的短路规则。
- macros。 在expression式值的实际计算开始之前,expression式中的所有macros都被展开。
定义的运算符的用法,它允许您检查macros是否在“#if”中间定义。
不是macros的标识符,都被认为是数字零。 这使您可以编写#if MACRO而不是#ifdef MACRO,如果您知道MACRO,则在定义时,将总是具有非零值。 不使用函数调用括号的函数式macros也被视为零。
从GCC文档 。
你可以做的是使用运行时评估的常规if语句:
if(SOME_DEF) { ... }