Präprozessor Konventionen

Gast #283407
Lesenswert?
• ▲
▼
Hallo an Alle,
habe mal eine ganz allgemeine Frage zur Festlegung von Symbolen für
Präprozessoranweisungen.
Wie sind eigentlich die Festlegungen der "_" in Worten Unterstrichen
wie  z.B. #ifndef AVR_IOM32_H_ oder __TIME_ zu verstehen.

Danke für Antworten und Gruß Volker
Gast #283408
Lesenswert?
• ▲
▼
Also so weit ich weiß, werden Konstanten, die nur innherhalb von
Include Dateien von Bedeutung sind, mit einem '_' (underscore)
begonnen, um die Wahrscheinlichkeit, dass es einen Namenkonflikt mit
vom Benutzer(programm) definierten Konstanten gibt, reduziert wird.

Konstanten die mit 2 underscores "__" beginnen, sind meines Wissens
oft System- bzw. Bibiotheksabhängige Konstanten.

  Wiesi
#283409
Lesenswert?
• ▲
▼
Führende Unterstriche sind in normalem "User-Code" verboten. Da die
(avr-)libc-Entwickler für ihre Bezeichner aber führende Unterstriche
nehmen dürfen, verhindert diese Konvention möglicherweise auftretende
Kollisionen. Genau genommen ist es übrigens keine Konvention, sondern
vom C-Standard so vorgeschrieben. Code, der führende Unterstriche bei
Präprozessorsymbolen verwendet und nicht zu einer Compilerbibliothek
wie der libc gehört, ist (soweit ich weiß) kein "well-formed C code".
Ein Standard-C-Compiler darf sich also zu Recht weigern, so etwas zu
übersetzen.

Unterstriche an allen anderen Positionen (am Ende oder mittendrin) darf
man immer verwenden; dann hängt es wirklich nur von einer Konvention ab,
ob man nun "TIME_" oder "TIME" schreibt.
#283410
Lesenswert?
• ▲
▼
Mein Beitrag bezog sich auf führende Unterstriche in
Präprozessorsymbolen. Die sind meines Wissens nach immer verboten, egal
ob man einen oder zwei Unterstriche voran stellt.

Nur bei anderen Bezeichnern gibt es hier einen Unterschied: Lokale
Symbole (lokal im Sinne von "lokal in einer Funktion/Codeblock",
nicht "lokal für eine Datei") dürfen mit einem einzigen Unterstrich
beginnen. Alle nicht-lokalen Symbole dürfen aber niemals mit
Unterstrich beginnen, auch wenn es nur einer ist. Zwei führende
Unterstriche sind grundsätzlich verboten.
Gast #283411
Lesenswert?
• ▲
▼
Danke für die Antworten!
@Chris: Hast du vielleicht einen Link oder Lit.-Hinweis über diese
Dinge  für mich.

Für mich bedeutet das also wenn ich ein eigenes Headerfile schreibe,
dass ich mein Sysmbol zur Verhinderung der Mehrfacheinbindung nicht mit
_ beginnen darf?

Gruß Volker
#283412
Lesenswert?
• ▲
▼
> Hast du vielleicht einen Link oder Lit.-Hinweis über diese
> Dinge  für mich.

Ich bin mir leider gerade nicht ganz sicher, ob der C-Standard in
diesem Punkt das gleiche sagt wie der C++-Standard. Im C++-Standard
steht, dass grundsätzlich zwei führende Unterstriche verboten sind, und
außerdem ein führender Unterstrich, falls ein Großbuchstabe folgt. "Im
globalen Namensraum" dürfen keine Bezeichner mit einem führendem
Unterstrich verwendet werden. Das kann man unter [17.4.3.1.2] im
C++-Standard nachlesen, dessen "final draft" es z.B. unter
http://www.kuzbass.ru:8086/docs/isocpp/lib-intro.html#lib.global.names
gibt; der final draft ist nicht die endgültige, offizielle Version des
Standards, stimmt aber zum größten Teil mit ihr überein.

> Für mich bedeutet das also wenn ich ein eigenes Headerfile schreibe,
> dass ich mein Sysmbol zur Verhinderung der Mehrfacheinbindung nicht
mit
> _ beginnen darf?

Genau.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.