Ich verwende .hpp, weil ich möchte, dass der Benutzer unterscheiden kann, welche Header C++-Header und welche C-Header sind.
Dies kann wichtig sein, wenn Ihr Projekt sowohl C- als auch C++-Module verwendet: Wie schon jemand anderes vor mir erklärt hat, sollten Sie dies sehr sorgfältig tun, und es beginnt mit dem "Vertrag", den Sie durch die Erweiterung anbieten
.hpp : C++ Kopfzeilen
(Oder .hxx, oder .hh, oder was auch immer)
Dieser Header ist nur für C++.
Wenn Sie sich in einem C-Modul befinden, versuchen Sie gar nicht erst, es einzubinden. Sie werden es nicht mögen, weil keine Anstrengungen unternommen werden, es C-freundlich zu machen (zu viel würde verloren gehen, wie Funktionsüberladung, Namespaces, usw. usw.).
.h : C/C++-kompatible oder reine C-Header
Dieser Header kann sowohl von einer C-Quelle als auch von einer C++-Quelle direkt oder indirekt eingebunden werden.
Sie kann direkt einbezogen werden, indem sie durch die __cplusplus
Makro:
- Das bedeutet, dass aus Sicht von C++ der C-kompatible Code wie folgt definiert wird
extern "C"
.
- Aus der Sicht von C ist der gesamte C-Code deutlich sichtbar, während der C++-Code verborgen bleibt (da er in einem C-Compiler nicht kompiliert werden kann).
Zum Beispiel:
#ifndef MY_HEADER_H
#define MY_HEADER_H
#ifdef __cplusplus
extern "C"
{
#endif
void myCFunction() ;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // MY_HEADER_H
Oder er könnte indirekt durch den entsprechenden .hpp-Header eingeschlossen werden, der ihn mit dem extern "C"
Erklärung.
Zum Beispiel:
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
extern "C"
{
#include "my_header.h"
}
#endif // MY_HEADER_HPP
und:
#ifndef MY_HEADER_H
#define MY_HEADER_H
void myCFunction() ;
#endif // MY_HEADER_H
2 Stimmen
Inzwischen gibt es Die C++ Core Guidelines die eindeutig *.h empfehlen
1 Stimmen
@Christophe Ich würde nicht sagen, dass der Standard "eindeutig" *.h empfiehlt. Sie überlassen es den Projektkonventionen:
SF.1: Use a .cpp suffix for code files and .h for interface files if your project doesn’t already follow another convention