Le variabili di partenza / membri con un carattere di sottolineatura potrebbero essere il compilatore?

11

Mi è stato insegnato fin dal liceo che definire variabili come questa:

int _a;

o

int __a;

dovrebbe essere considerato una cattiva pratica, perché in questo modo i compilatori di enigmi che usano variabili che iniziano con un trattino basso per nominare le variabili temporanee.

Per quanto ne so, questo è il motivo per cui alcune persone amano spostare il trattino basso alla fine del nome, come:

int a_;

Tuttavia, vedo un sacco di codice tutto intorno che fa uso di variabili di inizio underscore. E quel codice si sviluppa abbastanza bene con Visual Studio 2010 e g ++ 4.x.

Quindi mi chiedo: non è un problema al giorno d'oggi? I compilatori moderni sono più intelligenti riguardo alle convenzioni sui nomi?

    
posta Emiliano 25.03.2013 - 13:22
fonte

2 risposte

15

Sembra che tu abbia frainteso il motivo per cui i caratteri di sottolineatura del prefisso sono una cattiva pratica. Per farla breve, è perché lo standard C e C ++ riserva questo prefisso per i dettagli di implementazione, ad esempio per l'implementazione della libreria standard. (nota che _ e __ non sono riservati per le stesse cose, vedi commenti)

Anche se i nomi sono sotto scope (spazio dei nomi, classe, ecc.), ci possono essere alcuni nomi globali, in particolare macro, che usano questi prefissi e potrebbero interrompere silenziosamente il tuo codice se li usi anche.

Quindi, fondamentalmente, la maggior parte delle volte è sicuro usare questi prefissi MA se non li usi hai una garanzia al 100% che la tua denominazione non entrerà mai in conflitto con i nomi di implementazione.

Ecco perché, nel dubbio, non usare questi prefissi.

    
risposta data 25.03.2013 - 13:34
fonte
14

L'uso di due caratteri di sottolineatura è decisamente negativo, ovvero è riservato ai dettagli di implementazione specifici del compilatore. Questo non si applica all'utilizzo di un carattere di sottolineatura.

Alcune persone hanno odio per i caratteri di sottolineatura. Sia che chiami qualcosa m_index o highest_price o _a - lo detestano. Ho lavorato con qualcuno 25 anni fa che mi ha parlato di una stampante IBM specifica (molto popolare) che si adattava più linee sulla pagina omettendo il pixel inferiore su ogni altra linea. Questo andava bene per i memo, o per l'output di grandi quantità di numeri e simili, ma aveva l'effetto di rendere invisibile la metà dei caratteri di sottolineatura. (Sì, davvero!) Le persone di quella generazione in genere hanno l'irrazionale irritare l'odio, sia dall'interazione con quella stampante o dal lavorare con qualcuno che ci picchia contro che i caratteri di sottolineatura non devono essere usati.

La maggior parte delle persone trova l'uso di maiuscole e minuscole (un'opzione che non avevamo, per esempio, Fortran) un approccio più leggibile: mIndex , HighestPrice , a stanno piuttosto bene agli esempi precedenti sottolineati. Ti darò due regole:

  • non avvia mai nulla (funzione, variabile, macro, typedef) con due underscore
  • seleziona una convenzione coerente (ad esempio _limit per i parametri di funzione, m_limit per le variabili membro, mai usare caratteri di sottolineatura, maiuscole, parole maiuscole, ungherese, qualcosa ) e attenersi ad essa. Non saltare a volte con caratteri di sottolineatura all'inizio, a volte la fine, a volte non li usa, e cinque diverse convenzioni di involucro. Sii coerente.

La stampante in questione è ormai lontana. Se ti piace usare un trattino basso alla volta, sentiti libero di farlo. Ma capisci, esistono ancora avversari di sottolineatura.

    
risposta data 25.03.2013 - 13:59
fonte

Leggi altre domande sui tag