Kleine Frage: "Include-Wächter"
-
Man sieht beides, aber was ist nun "richtig", oder wo ist der Unterschied?
#ifndef _BLA_H_ #define _BLA_H_ ... #endif _BLA_H_und
#ifndef _BLA_H_ #define _BLA_H_ ... #endif //_BLA_H_
-
Der Unterschied ist dass ersteres eigentlich nicht gültig ist, aber von vielen Compilern toleriert wird

-
Der Unterstrich beim Makronamen sollte auch unterlassen werden. Unterstriche als Prefix bleiben inoffiziell den Compiler-Herstellern überlassen.
-
Aha, danke!
Also richtig wäre dann:#ifndef BLA_H #define BLA_H #endifUnterstriche zwischen den Namen sind ja erlaubt!?
-
Artchi schrieb:
Der Unterstrich beim Makronamen sollte auch unterlassen werden. Unterstriche als Prefix bleiben inoffiziell den Compiler-Herstellern überlassen.
Nicht nur inoffiziell!
-
Ob sie sogar offiziell den Herstellern vorbehalten sind, weiß ich nicht. Weiß nicht ob es im Stroustrup drin steht.
@ceplusplus! Unterstriche sind im Namen natürlich erlaubt. Nur halt nicht als Prefix.
-
Siehe Standard
17.4.3.1.2 Global names
1
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
-
LordJaxom schrieb:
Der Unterschied ist dass ersteres eigentlich nicht gültig ist, aber von vielen Compilern toleriert wird

Denke, tolerieren ist hier garnicht nötig, denn _BLA_H wird ja oben definiert und vom Präprozessor in Wärme umgewandelt ;). Drum beide Versionen hier praktisch gleichbedeutend ...
-
Meines wissens darf nach der Präprozessoranweisung #endif strenggenommen nichts mehr stehen. Der "Fehler" ist also beim Präprozessorlauf und nicht bei der Compilierung. Zu dem Zeitpunkt ist das Makro also noch nicht vom Präprozessor ersetzt

GCC gibt ne Warnung "trailing characters after #endif"