2016-03-21 15 views
3

Ich habe das in entweder mit dem #ifdef oder #else Zustand, nie die #elseif#elseif vs #elif (C/C++ Preprocessor)

#ifdef ... 
#elseif defined(...) 
#else 
#endif 

immer führt das Schreiben gefunden. Wenn jedoch #elif ersetzt wird, funktioniert es erwartungsgemäß basierend auf dem, was definiert ist. Welchen gewundenen Zweck erfüllt die Existenz von #elseif? Und wenn nicht, warum beschweren sich die Präprozessor nicht?

Vielleicht ist das der Grund, warum ich seit Jahren (Jahrzehnte, wirklich) hässliche # else/# endif Blöcke benutze, da sie zumindest zuverlässig sind!

+0

Wenn die Sache nach '# ifdef' definiert ist, sollten Sie eine" ungültige Preprocessing-Direktive "Fehler sehen. ([Beispiel] (http://ideone.com/FCPtSD)) – molbdnilo

Antwort

9

#elseif ist nicht definiert. Der Präprozessor beschwert sich nicht, weil #ifdef falsch ist und die Anweisungen in diesem #ifdef-Block nicht analysiert werden. Um es zu veranschaulichen, ist dieser Code gültig: