2013-06-28 11 views
7

Stavo guardando un po 'del codice CFArray dopo aver scoperto che era open source e ho trovato un codice strano per me. Qual è il punto di queste condizionali "vuote" if (0)? C'è qualche vantaggio pazzesco o è appena passato da qualcosa? Questo codice è line 957 di CFArray.c in GitHub.Qual è il punto di questi condizionali if (0)?

if (0) { 

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

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

Mi sembra un hack "non eseguire questo codice". –

+0

Questo è quello che pensavo all'inizio a causa del rientro ma in realtà è "if (0) {} else if (validStuff) {}. – user988375

+0

potrebbe essere un residuo dal debug del codice. ma posso solo indovinare ... – katzenhut

risposta

7

Sono probabilmente i resti di una delle numerose migrazioni del codebase da una piattaforma all'altra nei suoi molti anni di storia. E, in generale, se si dispone di uno strumento che migra automaticamente e correttamente il codice dal modulo A al modulo B, in genere non si desidera eseguire manualmente il letargo con esso poiché il rischio di introdurre un errore è troppo elevato.

Se si va indietro nel tempo per passare da NeXTSTEP a OpenStep, c'era una tecnologia di conversione chiamata TOPS che è stata utilizzata per automatizzare la conversione da API a API. Una seconda variante è stata creata per migrare da Objective-C a Java nei giorni WebObjects.

Era, in effetti, una sorta di motore di refactoring automatizzato incentrato su API e linguaggio transmogrifying.

TOPS era piuttosto potente e potrebbe essere facilmente esteso. È stato usato in modo abbastanza efficace per eseguire vari tipi di migrazioni - versione, API, stile, ecc. - sia nella comunità di terze parti che all'interno di Apple/NeXT.

(Personalmente, l'ultima volta che ho utilizzato TOPS era ~ 2002ish per migrare un'applicazione 750 ++ di riga NeXTSTEP 3.3 Objective-C++ su Mac OS X 10.2. Migrazione richiesta da 3.3 -> 4.2, 4.2 -> PR1, PR1 -> 10.2 È stata una bella sfida, ma molto divertente. C'è un po 'più di fondo qui: http://www.cocoabuilder.com/archive/cocoa/221418-porting-from-windows-to-mac.html.)

1

probabile, che è stato fatto al fine di omettere percorsi di codice, senza incorrere in un unreachable code avviso/errore.