their includes headers guards functions files cpp compile and c++ header-files

includes - C++: motivo por el cual se usa ".hh" como extensión para los archivos de encabezado de C++



include in c++ (6)

Esta pregunta puede sonar estúpida. Pero me gustaría saber por qué usamos ".hh" como extensión para los archivos de encabezado de C ++ en lugar de usar solo ".h".

Los archivos de encabezado están preprocesados ​​y al preprocesador ni siquiera le importa la extensión del archivo de encabezado. Entonces, incluso creo un archivo de encabezado con una extensión ".qwe" (test.qwe). Entonces, por qué usar ".hh" como extensión para los archivos de encabezado de C ++.

Algunos dicen que estamos usando ".cc" como extensión para que los archivos C ++ se diferencien de los archivos C (que tiene una extensión ".c"), de la misma manera estamos usando ".hh" como extensión para los archivos de encabezado de C ++ para diferenciarnos de C archivos de cabecera (que tiene una extensión ".h"). No creo que esto sea una razón válida.

¿Alguien sabe la razón para nombrar de esa manera?


Algunos dicen que estamos usando ".cc" como extensión para que los archivos C ++ se diferencien de los archivos C (que tiene una extensión ".c"), de la misma manera estamos usando ".hh" como extensión para los archivos de encabezado de C ++ para diferenciarnos de C archivos de cabecera (que tiene una extensión ".h") .

Esa es exactamente la razón. Es solo para diferenciar los encabezados CPP de los encabezados C.

Algunos programadores y bibliotecas, como Boost, usan .hpp para los encabezados de CPP. Mi elección personal es esta:

  • ejemplo.c
  • example.cpp
  • ejemplo.h
  • example.h ++

Incluso si todos ellos pertenecen a un gran proyecto, todavía puedes descubrir cuál es cuál. No se necesita ninguna descripción.


Creo que es sobre todo una convención social.

Sin embargo, los compiladores GCC recientes pueden compilar un encabezado (único) foo.hh o foo.h en algo como foo.hh.gch o foo.h.gch que esencialmente contiene una imagen de pila de memoria persistente del compilador (el programa cc1plus comenzado por g++ ) después de haber analizado ese encabezado.

Observe que la biblioteca estándar de C ++ 11 define los archivos de encabezado como, por ejemplo, <vector> sin ninguna extensión.


Esto es completamente convencional, no hay ninguna razón especial para ello. Por lo general, las personas intentan ser coherentes en un proyecto, en equipos o incluso en toda una empresa. Ayuda a los desarrolladores que recogen su código después de que se haya ido hace mucho tiempo a entender que abc.hh va con el archivo abc.cc y abc.h va con abc.c.


No es por ninguna razón específica, es solo una convención (específica para el desarrollador o proyecto). Como la "extensión de archivo" es solo una parte del nombre, no importa mucho, ya que los archivos de origen son solo archivos de texto simple. Además, los archivos de encabezado solo se copian y pegan en el archivo que los incluyó (a través de #include , por lo que la extensión del archivo significa menos para ellos).

Los encabezados de las bibliotecas de Borland tenían extensión .hpp . Los encabezados de biblioteca estándar de C ++ no tienen ninguna extensión. Es solo una cuestión de convención y gusto personal.


Puede nombrar sus encabezados como desee, incluso pueden no tener ninguna extensión.

Esta pregunta frecuente menciona las convenciones de nombres de encabezados.


Una de las razones es que si estoy creando una dll que tiene una API de C en torno a un montón de código de C ++, necesito diferenciar entre mis encabezados de C que el cliente puede usar para importar funciones de C y mis encabezados de C ++ internos que explícitamente no. desea permitir que el cliente para importar.

La vinculación a una función C es bastante simple desde la mayoría de los lenguajes / entornos sin casi gastos generales. No tiene que pensar en todas las complejidades heredadas en C ++. Así que si tuviera que trabajar con una biblioteca de este tipo, me aseguraría de separar mi C ++ de mi interfaz C.