Odpowiadam na to w celu przypomnienia o komentarzach do odpowiedzi „user1949346” na ten sam program operacyjny.
Tak więc wielu już odpowiedziało: tak czy inaczej jest w porządku. Następnie podkreśla własne wrażenia.
Wprowadzenie, tak jak w poprzednich wymienionych nazwanych komentarzach, moja opinia jest taka, że C++
proponowane są rozszerzenia nagłówków, .h
jeśli tak naprawdę nie ma żadnego powodu.
Ponieważ dokumenty ISO / IEC używają tej notacji plików nagłówkowych i nie .hpp
występuje nawet ciąg pasujący do ich dokumentacji językowej C++
.
Ale teraz dążę do akceptowalnego powodu. DLACZEGO którykolwiek z tych sposobów jest w porządku, a zwłaszcza dlaczego nie jest on zależny od języka.
Więc zaczynamy.
C++
Dokumentacja (ja faktycznie biorąc odwołanie od wersji N3690) określa, że nagłówek musi być zgodne z następującą składnią:
2.9 Nazwy nagłówków
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 "
Tak więc, jak możemy wyodrębnić z tej części, nazwa pliku nagłówka może być dowolną poprawną częścią kodu źródłowego. Z wyjątkiem zawierających '\n'
znaki i w zależności od tego, czy ma zostać uwzględniony <>
, nie może zawierać znaku >
. Lub w inny sposób, jeśli jest dołączony przez ""
-include, nie może zawierać "
.
Innymi słowy: jeśli masz środowisko obsługujące nazwy plików prettyStupidIdea.>
, takie jak:
#include "prettyStupidIdea.>"
byłoby ważne, ale:
#include <prettyStupidIdea.>>
byłby nieważny. Odwrotnie to samo.
I nawet
#include <<.<>
byłaby poprawną, możliwą do włączenia nazwą pliku nagłówka.
Nawet to byłoby zgodne C++
, byłby to całkiem głupi pomysł, tho.
I dlatego też .hpp
jest ważny.
Ale to nie wynik decyzji komitetów opracowujących decyzje dotyczące języka!
Dyskusja na temat używania .hpp
jest tym samym, co robienie tego .cc
, .mm
lub o czymkolwiek innym, co czytam w innych postach na ten temat.
Muszę przyznać, że nie mam pojęcia, skąd .hpp
pochodzi 1 , ale założę się, że wynalazca jakiegoś narzędzia do analizy, IDE lub czegoś innego zainteresowanego C++
wpadł na ten pomysł, aby zoptymalizować niektóre wewnętrzne procesy lub po prostu wymyślić niektóre (prawdopodobnie nawet dla nich koniecznie ) nowe konwencje nazewnictwa.
Ale to nie jest część języka.
I ilekroć ktoś decyduje się na to w ten sposób. Może dlatego, że lubi to najbardziej lub ponieważ niektóre aplikacje przepływu pracy tego wymagają, nigdy 2 nie jest wymogiem języka. Więc ktokolwiek powie „pp jest dlatego, że jest używany z C ++”, po prostu się myli w odniesieniu do definicji języków.
C ++ dopuszcza wszystko, co jest zgodne z poprzednim akapitem. A jeśli jest coś, co komitet zaproponował użyć, to używa, .h
ponieważ jest to rozszerzenie pozwane we wszystkich przykładach dokumentu ISO.
Wniosek:
Tak długo, jak nie widzisz / nie odczuwasz potrzeby używania .h
over .hpp
i vice versa, nie powinieneś się tym przejmować. Ponieważ oba będą stanowić prawidłową nazwę nagłówka o tej samej jakości w stosunku do standardu. A zatem wszystko, co WYMAGA korzystania .h
lub .hpp
stanowi dodatkowe ograniczenie standardu, które może być nawet sprzeczne z innymi dodatkowymi ograniczeniami, które nie są ze sobą zgodne. Ale ponieważ OP nie wspomina o żadnym dodatkowym ograniczeniu językowym, jest to jedyna poprawna i akceptowalna odpowiedź na pytanie
„ * .h lub * .hpp dla definicji klas ” to:
Oba są jednakowo poprawne i obowiązują, o ile nie występują żadne ograniczenia zewnętrzne.
1 Z tego, co wiem, najwyraźniej to właśnie ramy doładowań wymyśliły to .hpp
rozszerzenie.
2 Oczywiście nie mogę powiedzieć, co przyniosą niektóre przyszłe wersje!