我的项目dlog中的代码如果isConsoleLogActive
为YES,则应在控制台中打印值。
它会出现错误,例如运营商'已定义'需要标识符
#if defined ([Util isConsoleLogActive])// Operator 'defined' requires an identifier in this line
#define DLog(...) NSLog(__VA_ARGS__)
#define DTrace() NSLog(@"%s", __PRETTY_FUNCTION__)
#else
#define DLog(...) /* */
#define DTrace() /* */
#endif
如果我在我的.m中使用相同的代码([Util isConsoleLogActive]
),它的效果非常好。我只在#define
可能是什么问题。请给我一些想法。
答案 0 :(得分:3)
以#
开头的各种命令是预处理程序指令。这些在构建时编译阶段之前执行,在应用程序实际执行之前执行。您应该使用预处理程序指令根据构建配置有条件地在应用程序中包含不同的代码。但是,预处理器是在运行时处理特定平台上的条件执行的错误方法;为此,你想要你的标准"如果......其他"逻辑。
如果您使用该语句的目标是确定给定的选择器是否存在,请尝试使用respondsToSelector。
答案 1 :(得分:1)
的结果
[Util isConsoleLogActive]
在编译时不知道。因此,您不能将其与##; #if定义'。
一起使用