2017-02-22 1 views
-1

jetzt bin ich wieder verwirrt. In unserem alten C-Code habe ich einige seltsame Teile gefunden, eine Dump-Funktion, die anscheinend auf Terminal gedruckt wird und ich frage mich, ob Sie erklären können, warum dieses "#if 0" verwendet wird?Was ist der Zweck von "#if 0 ... # endif" Erklärung

Meine Vermutung ist, dass dies ein alter Weg Code auszukommen ....

#if 0 
dump(b, cnt) 
    char *b; 
    int cnt; 
{ 
    int i; 

    if (cnt == 0) 
    return; 

    for (i=0; i < cnt; i++, b++){ 
    if ((i % 16) == 0) 
     printf("\n"); 
    printf("0x%02x ", *b); 
    } 
} 
#endif 
+2

Es ermöglicht Ihnen das einfache Aktivieren/Deaktivieren eines Stücks Code (z. B. zu Testzwecken). –

+0

Und Sie müssen berücksichtigen, dass das nicht gleichbedeutend mit dem Kommentieren ist. –

Antwort

1

Es ist nicht eine „alte Art und Weise“, es ist eine separate Art und Weise. Dies verwendet den Präprozessor, um die enthaltenen Zeilen auszuschneiden, so dass der Compiler sie niemals sieht.

Es ist eine extreme Form von "Feature toggles"; oft sehen Sie Code wie

#if defined SOME_HANDY_FEATURE 
void use_some_handy_feature(int handyness) 
{ 
    ... 
} 
#endif 

Aber hier der #define durch die wörtliche 0 ersetzt wird, was natürlich falsch ist, so wird der Codeblock entfernt.

Es ist praktisch, da es funktioniert, auch wenn der entfernte Code Kommentare enthält, die normale /* ... */ Kommentare nicht, da sie nicht verschachteln.

+0

Danke Jungs, meine Ahnung war richtig. Entschuldigung, dass ich es verpasst hatte, wurde vorher gefragt (mein Fehler. –