Frage

Ich habe einen Blick durch einig Open-Source-C ++ Code und eine Menge doppelt unter Noten feststellen, wo im Code verwendet, vor allem zu Beginn der Variablennamen.

return __CYGWIN__;

Nur frage mich, gibt es einen Grund dafür, oder ist es nur einige Leute Code Stile? Ich würde denken, dass ich es schwer zu lesen macht.

War es hilfreich?

Lösung

Programmierung in C ++, Regeln und Empfehlungen :

  

Die Verwendung von zwei Unterstreichungen (__ ` ') in Identifikatoren wird für den Compiler internen Gebrauch reserviert gemäß dem ANSI-C-Standard.

     

Unterstreichungen ( `_ ') werden häufig in Namen von Bibliotheksfunktionen (wie "_main" und "_exit") verwendet. Um Kollisionen zu vermeiden, beginnt einen Bezeichner nicht mit einem Unterstrich.

Andere Tipps

Es sei denn, sie glauben, dass sie „im Rahmen der Umsetzung“ sind, das heißt die Standardbibliotheken, dann sollten sie nicht.

Die Regeln sind recht spezifisch und sind etwas detaillierter als einige andere haben vorgeschlagen.

Alle Bezeichner, die einen Doppelstrich oder beginnen mit einem Unterstrich von einem Großbuchstaben gefolgt enthalten, werden für die Verwendung der Umsetzung auf allen Bereichen vorbehalten, das heißt, sie könnten für Makros verwendet werden.

Darüber hinaus sind alle anderen Kennungen, die mit einem Unterstrich beginnen (das heißt nicht durch einen anderen Unterstrich oder einem Großbuchstaben gefolgt) für die Umsetzung auf globaler Tragweite vorbehalten. Dies bedeutet, dass Sie diese Kennungen in Ihrem eigenen Namensraum oder in Klassendefinitionen verwenden können.

Aus diesem Grunde Microsoft Funktionsnamen mit einem Unterstrich und alle in Klein für viele ihre Kernlaufzeitbibliotheksfunktionen verwenden, die nicht Teil des C ++ Standard. Diese Funktionsnamen sind nicht garantiert entweder mit Standard-C ++ Funktionen oder Benutzercode-Funktionen kollidieren.

Nach dem C ++ Standard Bezeichner mit einem Unterstrich beginnen, wird für Bibliotheken vorbehalten. Identifiers mit zwei Unterstrichen beginnt, wird für Compiler-Anbieter reserviert.

Die vorstehenden Kommentare sind korrekt. __Symbol__ ist in der Regel eine magische Token von Ihrem hilfreich Compiler (oder Prä-Prozessor) Anbieter zur Verfügung gestellt. Vielleicht die meisten von ihnen verbreiteten sind __FILE__ und __LINE__, die von dem C-Präprozessor erweitert werden, um die aktuellen Dateinamen und die Zeilennummer anzuzeigen. Das ist praktisch, wenn Sie irgendeine Art von Programm Assertionsfehler protokollieren wollen, einschließlich der Text Ort des Fehlers.

Es ist etwas, das Sie nicht in ‚normalen‘ Code gemeint zu tun. Dadurch wird sichergestellt, dass Compiler und Systembibliotheken Symbole definieren, die mit Ihnen nicht kollidieren.

Neben Bibliotheken, die viele andere Leute über geantwortet, Manche Leute nennen auch Makros oder #define Werte für die Verwendung mit dem Prä-Prozessor. Dies würde es einfacher machen, mit zu arbeiten, und kann bei älteren Compiler haben dürfen Fehler umgangen werden.

Wie andere erwähnt, hilft es, Namenskollision zu verhindern und hilft zwischen Bibliothek Variablen und die eigenen zu beschreiben.

Die oben gestimmt Antwort zitiert Programmierung in C ++: Regeln und Empfehlungen :

  

"Die Verwendung von zwei Unterstreichungen (__` ') in Identifikatoren für den Compiler interne Verwendung gemäß dem ANSI-C-Standard reserviert."

jedoch, dass Seite Behauptung scheint als unbegründet

suchte ich ein paar C ++ und C-Normen, und war nicht in der Lage jede Erwähnung von Unterstrichen zu finden, um den Compiler der internen Gebrauch beschränkt zu sein.

C ++ (aktuelle Arbeitsentwurf, zugegriffen 2019-5- 26) heißt es in lex.name:

  
      
  • Jede Kennung, die ein Doppelstrich enthält __ oder beginnt mit einem von einem Großbuchstaben gefolgt Strich wird für die weitere Nutzung der Umsetzung vorbehalten.
  •   
  • Jede Kennung, die mit einem Unterstrich beginnt als Name für die Umsetzung für die Verwendung reserviert ist im globalen Namespace.
  •   

TL; DR: Doppel Unterstrichen zur Umsetzung vorbehalten

Obwohl diese Frage zu C ++ spezifisch ist, habe ich relevante Abschnitte von C-Normen zitiert 99 und 17:

C99 Abschnitt 7.1.3

  
      
  • Alle Bezeichner, die mit einem Unterstrich und entweder einen Großbuchstaben oder einem anderen Unterstrich beginnen immer für jeden Gebrauch vorbehalten.
  •   
  • Alle Bezeichner, die mit einem Unterstrich beginnen, werden immer für die Verwendung als Bezeichner mit Dateigültigkeitsbereich reserviert sowohl im normalen und Tag-Namen   Räume.
  •   

C17 sagt dasselbe wie C99.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top