Domanda

Stavo dando un'occhiata ad alcuni codici C ++ open source e ho notato molti double under score usati nel codice, principalmente all'inizio dei nomi delle variabili.

return __CYGWIN__;

Mi chiedo solo che ci sia una ragione per questo, o sono solo alcuni stili di codice di persone? Penserei di renderlo difficile da leggere.

È stato utile?

Soluzione

Da Programmazione in C ++, regole e raccomandazioni :

  

L'uso di due trattini bassi (`__ ') negli identificatori è riservato all'uso interno del compilatore secondo lo standard ANSI-C.

     

I caratteri di sottolineatura (`_ ') sono spesso usati nei nomi delle funzioni di libreria (come " _main " e " _exit "). Per evitare collisioni, non iniziare un identificatore con un carattere di sottolineatura.

Altri suggerimenti

A meno che non sentano di essere "parte dell'implementazione", ovvero delle librerie standard, allora non dovrebbero.

Le regole sono abbastanza specifiche e sono leggermente più dettagliate di quanto altri abbiano suggerito.

Tutti gli identificatori che contengono un carattere di sottolineatura doppio o che iniziano con un carattere di sottolineatura seguito da una lettera maiuscola sono riservati per l'uso dell'implementazione in tutti gli ambiti, ovvero potrebbero essere usati per le macro.

Inoltre, tutti gli altri identificatori che iniziano con un carattere di sottolineatura (ovvero non seguito da un altro carattere di sottolineatura o una lettera maiuscola) sono riservati per l'implementazione nell'ambito globale. Ciò significa che è possibile utilizzare questi identificatori nei propri spazi dei nomi o nelle definizioni delle classi.

Questo è il motivo per cui Microsoft usa nomi di funzioni con un trattino basso e tutti in minuscolo per molte delle loro funzioni core della libreria di runtime che non fanno parte dello standard C ++. Si garantisce che questi nomi di funzioni non si scontrino con le funzioni C ++ standard o con le funzioni del codice utente.

Secondo lo standard C ++, gli identificatori che iniziano con un carattere di sottolineatura sono riservati per le librerie. Gli identificatori che iniziano con due trattini bassi sono riservati ai fornitori di compilatori.

I precedenti commenti sono corretti. __Symbol__ è generalmente un token magico fornito dal tuo utile compilatore (o preprocessore). Forse i più utilizzati sono __FILE__ e __LINE__ , che sono espansi dal preprocessore C per indicare il nome del file e il numero di riga correnti. È utile quando si desidera registrare una sorta di errore di asserzione del programma, inclusa la posizione testuale dell'errore.

È qualcosa che non dovresti fare nel codice 'normale'. Ciò garantisce che i compilatori e le librerie di sistema possano definire simboli che non si scontreranno con i tuoi.

Oltre alle librerie a cui hanno risposto molte altre persone, alcune persone nominano anche macro o valori #define da utilizzare con il preprocessore. Ciò semplificherebbe il lavoro e potrebbe aver permesso di aggirare i bug nei compilatori più vecchi.

Come altri menzionati, aiuta a prevenire la collisione dei nomi e aiuta a delineare tra le variabili della libreria e le tue.

La risposta più votata cita Programmazione in C ++: regole e raccomandazioni :

  

" L'uso di due trattini bassi (`__ ') negli identificatori è riservato all'uso interno del compilatore secondo lo standard ANSI-C. "

Tuttavia, il reclamo di quella pagina sembra essere infondato

Ho cercato alcuni standard C ++ e C e non sono riuscito a trovare alcuna menzione di caratteri di sottolineatura limitati all'uso interno del compilatore.

C ++ (bozza di lavoro attuale, accesso 2019-5- 26) afferma in lex.name :

  
      
  • Ogni identificatore che contiene un carattere di sottolineatura doppio __ o inizia con un carattere di sottolineatura seguito da una lettera maiuscola è riservato all'implementazione per qualsiasi uso.
  •   
  • Ogni identificatore che inizia con un carattere di sottolineatura è riservato all'implementazione per l'uso come nome nello spazio dei nomi globale.
  •   

TL; DR: i trattini bassi sono riservati all'implementazione

Sebbene questa domanda sia specifica del C ++, ho citato sezioni pertinenti degli standard C 99 e 17:

C99 sezione 7.1.3

  
      
  • Tutti gli identificatori che iniziano con un carattere di sottolineatura e una lettera maiuscola o un altro carattere di sottolineatura sono sempre riservati per qualsiasi uso.
  •   
  • Tutti gli identificatori che iniziano con un trattino basso sono sempre riservati per l'uso come identificatori con ambito di file sia nel nome ordinario che in quello del tag   spazi.
  •   

C17 dice la stessa cosa di C99.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top