【问题标题】:How to change XCode ios SDK compiler settings to allow void return statements for non void methods?如何更改 XCode ios SDK 编译器设置以允许非 void 方法的 void 返回语句?
【发布时间】:2013-01-12 22:44:25
【问题描述】:

有人要求我用一些 ios 6 功能更新内置于 Xcode 3.1 的旧 ios 应用程序。

当我尝试使用我的 xcode 4.5 构建源代码时,它拒绝编译,因为项目中有很多地方在方法中使用了简单的 return 语句,而这些方法实际上应该返回一个布尔值或类似的值。

Xcode 3.1 允许,而 4.5 不允许。在中间的某个地方,苹果决定添加这个限制。

我的问题是代码超过 20,000 行代码,并且开发人员在需要停止执行的任何地方都使用了简单的 return 语句。由于编译器在遇到第一个错误时会停止编译,所以我必须一次修复一个,然后再次尝试编译,却发现另一个错误。我尝试了大约 2 个小时来修复 100 条这样的返回语句。

是否有编译器标志或 Xcode 构建设置会将这些错误更改为警告并允许我在 Xcode 4.5 上运行此应用程序?

这是 Xcode 抛出的确切错误:

/Users.../Classes/WaterMaps.m:5471:5: 非 void 方法 'initWithParams:mass:radius:totalAssetInfo:' 应该返回一个值

请帮忙..

【问题讨论】:

    标签: ios xcode compiler-construction return semantics


    【解决方案1】:

    这与 Xcode 无关,而与编译器有关。并且不是 Apple 添加了这个限制,编译器不是来自 Apple,它们是开源项目(GCCLLVM/clang)。

    请问您为什么要花 2 个小时来修复 100 条这样的退货声明?修复 100 个这样的返回语句应该不会超过 5 分钟。

    1. 在某处写return 0;,选中它,复制到剪贴板(CMD+C),再次删除。
    2. 在某处写return;,选中它,点击CMD+E将其复制到搜索缓冲区,然后再次删除。
    3. 转到您的源代码。
    4. 点击CMD+G,意思是“查找下一个”。
    5. 如果找到的表达式未标记为错误,请转到(4)。
    6. 点击CMD+V(粘贴),用return 0;覆盖return;
    7. 转到 (4)。

    所以基本上你只要看到错误就一直点击CMD+G 来跳转文件和CMD+V。要快速跳转到下一个文件,请在 Xcode 中打开错误视图:

    选择第一个文件的第一个错误,当您的CMD+G 程序到达文件末尾时,点击CMD+',它会跳转到列表中下一个文件的第一个问题。作为开发人员,您应该真正学会更有效地使用键盘。将手放在键盘上比在键盘和鼠标/触摸板/轨迹球/等之间来回移动效率高出数百倍。

    代码行的数量(“超过 20,000 行代码”)有什么关系?重要的是返回语句的数量。

    您的代码目前严重损坏,与其浪费时间思考如何编译这些损坏的代码,我强烈建议您去修复它。由于一旦修复,它将永远工作,并且在下次更新编译器并且您的最后一次破解不再工作时不会再次中断。

    我的意思是,如果您只键入 return,编译器如何知道您要为返回布尔值或 int 值的方法返回什么?建议的'return 0;'适用于所有返回数值(包括浮点)和布尔值(0 = false/NO)的方法,并使编译器再次满意。在这种情况下,它与古代 C 编译器返回的值相同。

    请注意,即使在 Xcode 3.1 中,这些 return 语句也应该在所有地方都产生警告。作为一名认真的开发人员,始终将所有警告视为错误。您的项目不应有任何警告。警告告诉您有问题或至少可能有问题,这意味着您应该出去修复它。几乎所有警告都可以通过修改代码来消除。因此,与其忽略警告或在编译器中禁用它们,不如修复它们。今天许多公司都有零警告政策,如果你的代码只产生一个警告,它就会被拒绝。如果此代码的作者将所有警告都视为错误,那么您现在不必修复它们。

    【讨论】:

    • 您好 Mecki,感谢您的详细回复。但正如我在问题中已经提到的那样,编译器在遇到第一次出现 void return 语句时立即停止编译。所以我必须根据方法使用的数据类型来修复错误,或者有时通过将方法声明更改为 void,因为该方法根本没有任何理由返回值。所以我的问题是你知道任何解决方案,任何东西,比如可能是类似于 -Wreturn-type 的编译器标志或阻止编译器将这些报告为错误而不是警告的东西?
    • @NikhilMathew 转到全局 Xcode 首选项(Xcode 菜单 -> Preferences...),在 General 选项卡上,选中复选框 Continue building after errors,它不会停止并构建所有一路走到尽头,收集所有不正确的无效回报。然后你就知道了所有这些,并且可以轻松地修复它们。
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多