来自Xcode Docs:
语法突出显示,代码完成以及所有其他索引驱动 功能由LLVM解析器处理。如果编译器知道a 符号,Xcode IDE也是如此。
但是在预处理程序指令中编写代码时,这些“索引驱动的功能”都不适用于我。有人有解决方案吗?
示例:
在启用未使用参数警告的情况下构建时,即使使用了 参数,也会生成大量警告。此特定屏幕截图中的代码来自Apples Reachability.m
,未经修改。请注意,此处也不存在语法突出显示:
在#if
内完成完成:
但是,#else
它一半使用局部变量:
但是当调用在当前方法范围之外声明的内容时会再次中断:
Another example
Another example
任何人都可以告诉我如何(甚至如果)可以修复这个问题吗?
答案 0 :(得分:2)
XCode实际上评估预处理程序指令的条件,并且只对当前真实条件内的代码进行突出显示/完成。例如
语法高亮,自动完成和警告(在这种情况下未使用的变量警告)不适用于不真实的情况。
我提出了一个问题,询问如何让XCode在条件的两边做所有这些事情,但到目前为止没有运气。
XCode syntax highlighting in both conditions of preprocessor #if #else
对于记录我不认为这种行为是一个错误。我可以想象一下,如果在编译时遇到错误会非常令人沮丧。然而,能够在不必操纵宏定义的情况下编辑这些条件的两面是很好的。
答案 1 :(得分:1)
@ chown,我认为“如果编译器知道一个符号......就像它们构建时一样。”表明编译器解析代码并遵循所有预处理器条件。在这种情况下,编译器不会注意到条件失败的#ifdef
内的变量用法。
这也解释了为什么它“在#else
中工作正常。”。
您可以尝试使用UNUSED宏,但您必须禁用“未使用的值”警告:
#define UNUSED(a) a
...
-(void)test:(id)argument
{
UNUSED(argument);
#ifdef AAA
NSLog(@"arg:%@", argument);
#endif
}
答案 2 :(得分:-1)
原来这是一个错误,现在已在Xcode版本4.3.1(4E1019)中修复。