2013-06-28 34 views
7

當我發現它是開源的,我發現了一些對我來說奇怪的代碼後,我正在瀏覽一些CFArray代碼。這些「空」if (0)條件是什麼意思?有一些瘋狂的好處,還是這只是從某種東西中遺留下來的?此代碼位於GitHub的CFArray.c的line 957上。這些if(0)條件是什麼意思?

if (0) { 

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

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

它在我看來就像一個「不要執行此代碼」破解。 –

+0

這就是我首先想到的,因爲縮進,但它實際上是'if(0){} else if(validStuff){}。 – user988375

+0

可能是調試代碼的剩餘部分。但我只能猜... – katzenhut

回答

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 - > PR1,PR1 - > 10.2遷移這是一個很大的挑戰,但很有趣,這裏有更多的背景:http://www.cocoabuilder.com/archive/cocoa/221418-porting-from-windows-to-mac.html。)