XCode 预处理器#if #else 两种条件下的语法高亮
XCode syntax highlighting in both conditions of preprocessor #if #else
我的应用程序使用的库不会在模拟器上构建 and/or 运行 因此我通过使用预处理器指令围绕引用有效地删除了对该库的引用,如下所示:
#if !(TARGET_IPHONE_SIMULATOR)
//Do the real implementation
#else
//Do a dummy implementation for testing
XCode 自动检查我当前的目标是什么,并评估我认为不错的#if/#else。问题是,无论哪个条件都不会被编译,它都会关闭语法高亮显示、自动完成等。 (例如,如果我当前的目标是模拟器,则实际实现中的代码会失去突出显示)
我糟糕的解决方案是更改目标,以便我想要编辑的任何实现都得到 'activated'。有没有办法让它们始终突出显示,以便我可以无缝编辑它们?
如果两个实现都可以针对任一目标进行编译,那么您可以这样做:
#if !(TARGET_IPHONE_SIMULATOR)
const bool simulator = false;
#else
const bool simulator = true;
#endif
if (simulator)
{
//Do a dummy implementation for testing
}
else
{
//Do the real implementation
}
两个分支都将被编译,尽管优化器应该丢弃永远不能用于给定目标的分支。
如果在目标为模拟器时甚至无法构建使用该库的代码,您可以这样做:
#if !TARGET_IPHONE_SIMULATOR
if (true)
{
//Do the real implementation
}
else
#endif
{
//Do a dummy implementation for testing
}
在这种情况下,当以模拟器为目标时,真正的实现仍然不会被语法着色或支持完成,但两个分支在以设备为目标时都会有那些。
您还可以为模拟器实现虚拟版本的库。您可以让它定义所有接口,但一切都会 return 失败甚至抛出异常。您将在所有代码周围使用 #if TARGET_IPHONE_SIMULATOR
,这样库最终对于设备构建完全是空的。然后,您会 link 反对并使用第一种方法。
我的应用程序使用的库不会在模拟器上构建 and/or 运行 因此我通过使用预处理器指令围绕引用有效地删除了对该库的引用,如下所示:
#if !(TARGET_IPHONE_SIMULATOR)
//Do the real implementation
#else
//Do a dummy implementation for testing
XCode 自动检查我当前的目标是什么,并评估我认为不错的#if/#else。问题是,无论哪个条件都不会被编译,它都会关闭语法高亮显示、自动完成等。 (例如,如果我当前的目标是模拟器,则实际实现中的代码会失去突出显示)
我糟糕的解决方案是更改目标,以便我想要编辑的任何实现都得到 'activated'。有没有办法让它们始终突出显示,以便我可以无缝编辑它们?
如果两个实现都可以针对任一目标进行编译,那么您可以这样做:
#if !(TARGET_IPHONE_SIMULATOR)
const bool simulator = false;
#else
const bool simulator = true;
#endif
if (simulator)
{
//Do a dummy implementation for testing
}
else
{
//Do the real implementation
}
两个分支都将被编译,尽管优化器应该丢弃永远不能用于给定目标的分支。
如果在目标为模拟器时甚至无法构建使用该库的代码,您可以这样做:
#if !TARGET_IPHONE_SIMULATOR
if (true)
{
//Do the real implementation
}
else
#endif
{
//Do a dummy implementation for testing
}
在这种情况下,当以模拟器为目标时,真正的实现仍然不会被语法着色或支持完成,但两个分支在以设备为目标时都会有那些。
您还可以为模拟器实现虚拟版本的库。您可以让它定义所有接口,但一切都会 return 失败甚至抛出异常。您将在所有代码周围使用 #if TARGET_IPHONE_SIMULATOR
,这样库最终对于设备构建完全是空的。然后,您会 link 反对并使用第一种方法。