Sto rispondendo a questo come promemoria, per dare punto ai miei commenti sulla risposta "user1949346" a questo stesso PO.
Quindi, come molti hanno già risposto: in entrambi i casi va bene. Seguito da enfasi delle proprie impressioni.
Come introduttivo, come anche nei precedenti commenti citati, la mia opinione è che le C++
estensioni di intestazione vengano proposte .h
se in realtà non vi è alcuna ragione contro di esso.
Dal momento che i documenti ISO / IEC utilizzano questa notazione di file header e nessuna corrispondenza di stringa si .hpp
verifica nemmeno nelle loro documentazioni linguistiche C++
.
Ma ora sto cercando un motivo accettabile PERCHÉ in entrambi i casi è ok, e soprattutto perché non è soggetto del linguaggio stesso.
Quindi eccoci.
La C++
documentazione (in realtà sto prendendo riferimento alla versione N3690) definisce che un'intestazione deve essere conforme alla seguente sintassi:
2.9 Nomi delle intestazioni
header-name:
< h-char-sequence >
" q-char-sequence "
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any member of the source character set except new-line and >
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except new-line and "
Quindi, come possiamo estrarre da questa parte, anche il nome del file di intestazione può essere qualsiasi cosa sia valida nel codice sorgente. Tranne il contenere '\n'
caratteri e in base al fatto che debba essere incluso da <>
esso non è consentito contenere un >
. O viceversa se è incluso da ""
-include non è consentito contenere a "
.
In altre parole: se hai un ambiente che supporta nomi di file come prettyStupidIdea.>
, includi come:
#include "prettyStupidIdea.>"
sarebbe valido, ma:
#include <prettyStupidIdea.>>
sarebbe invalido. Il contrario è lo stesso.
E persino
#include <<.<>
sarebbe un nome file di intestazione includibile valido.
Anche se ciò si conformasse C++
, sarebbe comunque un'idea piuttosto stupida.
Ed è anche per questo che .hpp
è valido.
Ma non è un risultato dei comitati che progettano le decisioni per la lingua!
Discutere sull'uso .hpp
è lo stesso di farlo .cc
, .mm
o di qualsiasi altra cosa abbia letto in altri post su questo argomento.
Devo ammettere che non ho idea di dove sia .hpp
arrivato 1 , ma scommetterei che un inventore di alcuni strumenti di analisi, IDE o qualcos'altro che mi riguarda è C++
venuto a questa idea per ottimizzare alcuni processi interni o semplicemente per inventarne alcuni (probabilmente anche per loro necessariamente ) nuove convenzioni di denominazione.
Ma non fa parte della lingua.
E ogni volta che si decide di usarlo in questo modo. Sia perché gli piace la maggior parte o perché alcune applicazioni del flusso di lavoro lo richiedono, non è mai 2 è un requisito della lingua. Quindi chiunque dice "la pp è perché è usata con C ++", ha semplicemente torto riguardo alla definizione delle lingue.
C ++ consente qualsiasi cosa che rispetti il paragrafo precedente. E se c'è qualcosa che la commissione ha proposto di usare, allora sta usando .h
poiché questa è l'estensione citata in giudizio in tutti gli esempi del documento ISO.
Conclusione:
Finché non vedi / senti alcun bisogno di usare .h
over .hpp
o viceversa, non dovresti preoccuparti. Perché entrambi formerebbero un nome di intestazione valido della stessa qualità rispetto allo standard. E quindi tutto ciò che RICHIEDE di usare .h
o .hpp
è una restrizione aggiuntiva dello standard che potrebbe persino essere in contraddizione con altre restrizioni aggiuntive non conformi tra loro. Ma poiché OP non menziona alcuna restrizione linguistica aggiuntiva, questa è l'unica risposta corretta e approvabile alla domanda
" * .h o * .hpp per le definizioni della classe " è:
Entrambi sono ugualmente corretti e applicabili purché non siano presenti restrizioni esterne.
1 Da quello che so, a quanto pare, è il framework boost che è venuto fuori con quell'estensione .hpp
.
2 Naturalmente non posso dire cosa ci porteranno alcune versioni future!