2009-11-14 14 views
25

Mi chiedo se la convenzione di denominazione utilizzata nelle librerie standard C/C++ abbia un nome o almeno un cheat-sheet in cui posso cercare le regole. Per esempio.Nome della convenzione di denominazione stdlib C/C++?

push_back -- underscore used 
setstate  -- but not used here! 
string::npos -- when to use abbreviations? 
fprintf 
... 

fa la convenzione di denominazione utilizzata in C/C++ librerie standard hanno un nome specifico?

+9

Inoltre, la strana lettera maiuscola di 'std :: ios_base :: Init' o_O –

+0

Cosa ?! anche le maiuscole sono usate! : P – AraK

+41

Si chiama "Qualunque merda ci è capitato di venire questa settimana". –

risposta

3

La triste verità è che non esiste una vera convenzione.

Vedere l'argomento ordine di stdio funziona come promemoria doloroso.

+2

C'è una buona ragione per quelli, in realtà. Con la tradizionale chiamata di funzione C ABI, chiamando più funzioni con lo stesso ultimo argomento (cioè per (i = 0; i ephemient

0

Non ho la risposta, ma almeno non credo che C e C++ utilizzino la stessa convenzione di denominazione.

+0

Potresti spiegare di più? – AraK

+0

Cose come fprintf, strlen, itoa (shudder) provengono da librerie C. Quelli hanno la convenzione di minuscole, senza underscore e pesanti abbreviazioni. Le librerie C sono quelle che iniziano con "c" in C++: cstdio, cstring, cmath ecc. – UncleBens

+0

Come 'C' ha un nome' strpbrk' e 'C++' ha un nome 'sync_with_stdio', e non' swstdio' :) –

24

C/C++ utilizza la famosa convenzione di denominazione di make-stuff-up-as-go-along. In generale, le uniche cose coerenti che si possono dire sulla convenzione di denominazione della libreria standard C/C++ è che non usa il caso cammello (eccetto per i nomi dei tipi STL di C++), usa i nomi di classi e funzioni minuscole e (a volte) usa caratteri di sottolineatura per separare le parole. Ma l'uso dei caratteri di sottolineatura è più una cosa di C++; C in particolare tende ad abbreviare le parole, ad es. strlen, memcpy. Questo è probabilmente il risultato della tendenza a utilizzare nomi molto concisi per le cose nei primi giorni di UNIX.

+17

"tendenza ad usare nomi molto concisi per le cose" che è dovuto a terminali di 80 caratteri o più piccoli; limiti di risorse sui compilatori; un innato desiderio di Huffman codifica l'universo; o tutto quanto sopra. –

+19

I compilatori Pre-ansi consideravano salienti i primi 6 caratteri di un simbolo per essere compatibili con Fortran, IIRC, quindi i simboli 'strlen',' strlenxyz' e 'strlenohmygodwhathaveidone' si riferivano sempre alla stessa cosa. Quindi, per compatibilità con i compilatori pre-ANSI, lo standard ANSI C si è assicurato che i primi 6 caratteri di tutti i simboli di libreria standard fossero unici tra loro. –

6

Penso che ci siano diversi gruppi inventati in tempi diversi da persone diverse e che utilizzano convenzioni un po 'diverse: librerie C, flussi, stringhe, STL (contenitori + algoritmi + iteratori). Ho la sensazione che quest'ultimo possa essere visto come la convenzione, che imposta l'esempio per cose come boost e C++ 0x naming.

8

La libreria standard C ha well defined rules da seguire per evitare di confondere il nome. Comunque non so nulla di C++.

Se pensi che questo è un pasticcio si dovrebbe verificare la libreria PHP ...

+0

+1 per il collegamento. Più nomi sono riservati di quanto ti rendi conto, per esempio i tipi che terminano con '_t'. – u0b34a0f6ae

+0

@kaizer: afaik riservando '_t' è una restrizione POSIX – Christoph

+0

Sì. C riserva solo quelli che iniziano con 'uint' o' int' e terminano con '_t'. –

0

Non credo che ci sia un nome per entrambi i set di convenzioni di denominazione.

Le convenzioni di denominazione negli standard C e C++ sono diverse, anche se leggermente correlate.

In particolare, nella libreria C, nessuna funzione o nome macro contiene un trattino basso (AFAICR), a differenza della libreria C++.

La maggior parte della convenzione di denominazione della libreria C era controllata da un precedente; ha standardizzato la pratica esistente (a partire dal 1984 circa), con poche invenzioni (la gestione delle impostazioni locali tramite <locale.h> è la principale).

La libreria C++ era basata anche su precedenti - ma un diverso insieme di precedenti, e penso che sia discutibile che lo STL non era in uso diffuso prima della sua adozione da parte dello standard in quanto le funzioni nella libreria C erano .

Problemi correlati