.c frente a .cc frente a .cpp frente a .hpp frente a .h frente a .cxx [duplicado]
Posibles duplicados:
*.ho *.hpp para las definiciones de su clase
¿Cuál es la diferencia entre el sufijo de archivo .cc y .cpp?
Solía pensar que solía ser eso:
.h
Los archivos son archivos de encabezado para C y C++ y, por lo general, solo contienen declaraciones..c
Los archivos son código fuente C..cpp
Los archivos son código fuente C++ (que también puede ser código fuente C).
luego aparecieron archivos como .hpp
, .cc
y .cxx
, y me confundí por completo... ¿cuál es la diferencia entre ellos? ¿Cuándo usas los "nuevos"?
Históricamente, las primeras extensiones utilizadas para C++ fueron .c
y .h
, exactamente como para C. Esto causó problemas prácticos, especialmente los .c
que no permitían que los sistemas de compilación diferenciaran fácilmente los archivos C++ y C.
Unix, en el que se desarrolló C++, tiene sistemas de archivos que distinguen entre mayúsculas y minúsculas. Algunos se usan .C
para archivos C++. Otros usados .c++
, .cc
y .cxx
. .C
y .c++
tienen el problema de que no están disponibles en otros sistemas de archivos y su uso disminuyó rápidamente. Los compiladores de DOS y Windows C++ tendían a utilizar .cpp
, y algunos de ellos hacen que la elección sea difícil, si no imposible, de configurar. La consideración de portabilidad hizo que esa elección fuera la más común, incluso fuera de MS-Windows.
Los encabezados han utilizado los correspondientes .H
, .h++
, .hh
, .hxx
y .hpp
. Pero a diferencia de los archivos principales, .h
sigue siendo hasta el día de hoy una opción popular para C++ incluso con la desventaja de que no permite saber si el encabezado se puede incluir en el contexto de C o no. Los encabezados estándar ahora no tienen ninguna extensión.
Además, algunos utilizan .ii
, .ixx
, .ipp
, .inl
para encabezados que proporcionan definiciones en línea y .txx
, .tpp
y .tpl
para definiciones de plantillas. Estos se incluyen en los encabezados que proporcionan la definición o manualmente en los contextos donde se necesitan.
A los compiladores y herramientas generalmente no les importa qué extensiones se usan, pero usar una extensión que asocian con C++ evita la necesidad de rastrear cómo configurarlos para que reconozcan correctamente el lenguaje usado.
Edición de 2017: el soporte del módulo experimental de Visual Studio se reconoce .ixx
como una extensión predeterminada para las interfaces del módulo, clang++ lo reconoce .c++m
y con el mismo propósito..cppm
.cxxm
Esas extensiones no son realmente nuevas, son viejas. :-)
Cuando C++ era nuevo, algunas personas querían tener una extensión .c++ para los archivos fuente, pero eso no funcionaba en la mayoría de los sistemas de archivos. Así que intentaron algo parecido, como .cxx o .cpp.
Otros pensaron en el nombre del idioma y en "incrementar" .c para obtener .cc o incluso .C en algunos casos. No entendí mucho.
Algunos creían que si la fuente es .cpp, los encabezados deberían ser .hpp para coincidir. Moderadamente exitoso.