7

在发现它是开源的之后,我正在查看一些 CFArray 代码,我发现了一些对我来说很奇怪的代码。这些“空”if (0)条件的意义何在?是否有一些疯狂的好处,或者这只是从某事中遗留下来的?此代码位于 GitHub 上 CFArray.c 的第 957 行。

if (0) {

} 
else if (NULL == array->_store) {
    if (0) {

    } 
    else if (0 <= futureCnt) {
           // blah blah
    }
}
4

2 回答 2

7

它们很可能是代码库在其多年历史中从平台到平台的众多迁移之一的残余物。而且,一般来说,如果您有一个工具可以自动正确地将代码从表单 A 迁移到表单 B,那么您通常不希望事后手动处理它,因为引入错误的风险太大。

如果您回溯到从 NeXTSTEP 到 OpenStep 的过渡,有一种称为 TOPS 的转换技术用于自动化从 API 到 API 的转换。在 WebObjects 时代,创建了第二个变体以从 Objective-C 迁移到 Java。

实际上,它是一种专注于变形 API 和语言的自动重构引擎。

TOPS 非常强大,可以轻松扩展。它已被非常有效地用于执行各种迁移——版本、API、样式等——在 3rd 方社区和 Apple/NeXT 内部。

(就个人而言,我最后一次使用 TOPS 是在 2002 年左右将 750,000 行的 NeXTSTEP 3.3 Objective-C++ 应用程序迁移到 Mac OS X 10.2。需要从 3.3 -> 4.2、4.2 -> PR1、PR1 -> 10.2 迁移。挑战,但很有趣。这里有一点背景:http: //www.cocoabuilder.com/archive/cocoa/221418-porting-from-windows-to-mac.html。)

于 2013-06-28T21:38:25.513 回答
1

这样做可能是为了省略代码路径而不会导致无法访问的代码警告/错误。

于 2013-06-28T20:47:33.270 回答