我发现它是开源的,我正在查看一些CFArray代码,我发现了一些奇怪的代码。这些“空”if (0)
条件有什么意义?是否有一些疯狂的好处,或者这只是遗留下来的东西?此代码位于GitHub的CFArray.c的line 957上。
if (0) {
}
else if (NULL == array->_store) {
if (0) {
}
else if (0 <= futureCnt) {
// blah blah
}
}
答案 0 :(得分:7)
在很多年的历史中,它们很可能是代码库从平台迁移到平台的众多迁移之一。而且,一般来说,如果你有一个工具可以自动而正确地将代码从表单A迁移到表单B,那么你通常不希望在事后将其手动删除,因为引入错误的风险太大。
如果您及时回到从NeXTSTEP到OpenStep的过渡,那么有一种名为TOPS的转换技术可用于自动从API到API的转换。创建了第二个变体,用于在WebObjects时代从Objective-C迁移到Java。
实际上,它是一种专注于变换API和语言的自动重构引擎。
TOPS非常强大,可以轻松扩展。它已被用于执行各种迁移 - 版本,API,样式等 - 在第三方社区和Apple / NeXT内部。
(就个人而言,我最后一次使用TOPS是〜2002年将750,000行NeXTSTEP 3.3 Objective-C ++应用程序迁移到Mac OS X 10.2。需要从3.3迁移 - > 4.2,4.2 - &gt; PR1,PR1 - &gt ; 10.2。这是一个很大的挑战,但很有趣。这里有更多背景:http://www.cocoabuilder.com/archive/cocoa/221418-porting-from-windows-to-mac.html。)
答案 1 :(得分:1)
可能这样做是为了省略代码路径而不会引发unreachable code警告/错误。