2012-04-27 14 views
16

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".C++: Razón por la cual usar ".hh" como extensión para los archivos de encabezado de C++

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

Algunos dicen que estamos utilizando ".cc" como extensión para los archivos C++ para diferenciar de los archivos C (que tiene una extensión ".c"), también estamos usando el uso de ".hh" como extensión para archivos de encabezado C++ para diferenciar de los archivos de encabezado C (que tiene una extensión ".h"). No creo que esto sea una razón válida.

¿Alguien sabe la razón para nombrar de tal manera.

+4

Es solo una convención que algunas personas usan para diferenciar los encabezados destinados a los programas C++ de los encabezados destinados a los programas C. Nada más que eso. Si es válido o no, en gran medida se reducirá a guerras religiosas similares a los argumentos de colocación de los apoyos. –

+0

Vea también http://stackoverflow.com/q/5122728/716443. Puede ser una pista para algunos compiladores que su encabezado sea para Objective C++. – DavidO

+1

'.hpp' es una opción popular para los encabezados de C++ pero solo uso' .h' y '.cpp'. Esto es básicamente preferencia personal. – AJG85

Respuesta

25

Algunos dicen, estamos usando ".cc" como extensión para archivos de C++ de diferenciar de archivos de C (que tiene una ".c" extensión), del mismo modo que son utilizando ".hh" como extensión para archivos de encabezado C++ para diferenciar de los archivos de encabezado C (que tiene una extensión ".h").

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

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

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

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

5

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

This FAQ menciona las convenciones de nomenclatura de encabezado.

1

No es por ninguna razón específica, es solo una convención (específica del desarrollador o del proyecto). Como "extensión de archivo" es solo una parte del nombre, no importa mucho, ya que los archivos fuente son solo archivos de texto. Además, los archivos de cabecera se acaba de copiar-pegar en archivo que los incluyó (a través de #include, por lo que la extensión de archivo significa aún menos para ellos.

bibliotecas de Borland cabeceras tenían .hpp extensión. De C++ encabezados de biblioteca estándar s tienen ninguna extensión. Es sólo es cuestión de convención y el gusto personal.

1

Esto es completamente convencional, no hay un motivo especial para ello. Por lo general, las personas tratan de mantenerse coherentes en un proyecto, o en equipos o incluso en una empresa completa. Ayuda a los desarrolladores que recogen tu código después de que hayas pasado mucho tiempo a entender que abc.hh usa el archivo abc.cc y abc.h va con abc.c.

1

Una razón, si estoy creando un dll que tiene una API C alrededor de un montón de código C++, necesito diferenciar entre mis encabezados C que el cliente puede usar para importar funciones C y mis encabezados C++ internos que explícitamente no quiero permitir que el cliente importe.

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

1

Creo que es principalmente una convención social.

Sin embargo, los últimos compiladores GCC son capaces de compilar una (sola) cabecea foo.hh o foo.h en algo así como foo.hh.gch o foo.h.gch que contiene esencialmente una imagen montón de memoria persistente del compilador (programa cc1plus iniciado por g++) después de haber analizado ese encabezado

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

Cuestiones relacionadas