example - call c from c++
.c vs.cc vs..cpp vs.hpp vs.h vs.cxx (6)
En general, los archivos .c y .h son para código compatible con C o C, todo lo demás es C ++.
Muchas personas prefieren usar un emparejamiento consistente para archivos C ++: .cpp con .hpp, .cxx con .hxx, .cc con .hh, etc. Mi preferencia personal es para .cpp y .hpp.
Posibles duplicados:
* .h o * .hpp para sus definiciones de clase
Corregir la extensión de archivo de código C ++? .cc vs .cpp
Solía pensar que solía ser eso:
-
.h
archivos.h
son archivos de encabezado para C y C ++, y generalmente solo contienen declaraciones. -
.c
archivos.c
son código fuente C. -
.cpp
archivos.cpp
son código fuente C ++ (que también puede ser código fuente C).
luego .hpp
archivos como .hpp
, .cc
y .cxx
, y me confundí por completo ... ¿cuál es la diferencia entre ellos? ¿Cuándo usas los "nuevos"?
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. Entonces intentaron algo parecido a eso, como .cxx o .cpp.
Otros pensaban en el nombre del idioma y "incrementando" .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.
Hablando de la extensión .hpp, me parece útil cuando se supone que las personas deben saber que este archivo de encabezado contiene C ++ y no C , como usar espacios de nombres o plantillas, etc., en el momento en que ven los archivos, por lo que no intentan alimentarlo a un compilador de C ! Y también me gusta nombrar los archivos de encabezado que contienen no solo declaraciones sino también implementaciones, como archivos .hpp. como archivos de encabezado, incluidas las clases de plantilla. ¡Aunque esa es solo mi opinión y, por supuesto, no se supone que sea correcta! :)
Históricamente, las primeras extensiones utilizadas para C ++ fueron .c
y .h
, exactamente como para C. Esto causó problemas prácticos, especialmente el .c
que no permitía a los sistemas de compilación diferenciar fácilmente los archivos C ++ y C.
Unix, en el que se ha desarrollado C ++, tiene sistemas de archivos sensibles a mayúsculas y minúsculas. Algunos usaron .C
para archivos C ++. Otros utilizan .c++
, .cc
y .cxx
. .C
y .c++
tienen el problema de que no están disponibles en otros sistemas de archivos y su uso se elimina rápidamente. Los compiladores DOS y Windows C ++ tienden a usar .cpp
, y algunos de ellos hacen que la elección sea difícil, si no imposible, de configurar. La consideración de la 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 hoy en día una opción popular para C ++, incluso con la desventaja de que no permite saber si el encabezado se puede incluir en el contexto C o no. Los encabezados estándar ahora no tienen extensión en absoluto.
Además, algunos están utilizando .ixx
, .ixx
, .ipp
, .inl
para los encabezados que proporcionan definiciones en línea y .txx
, .tpp
y .tpl
para las definiciones de plantilla. Esos están incluidos en los encabezados que proporcionan la definición, o manualmente en los contextos donde se necesitan.
Normalmente, los compiladores y las herramientas no se preocupan por las extensiones que se usan, pero el uso de una extensión que asocian con C ++ evita la necesidad de rastrear cómo configurarlas para que reconozcan correctamente el lenguaje utilizado.
Edición de 2017: el soporte de módulos experimentales de Visual Studio reconoce .ixx
como una extensión predeterminada para interfaces de módulos, clang ++ reconoce .c++m
, .cppm
y .cxxm
con el mismo propósito.
Realmente no importa.
Si alimenta .c a un compilador de c ++ compilará como cpp, .cc / .cxx es solo una alternativa a .cpp utilizada por algunos compiladores.
.hpp es un intento de distinguir los archivos de encabezado donde hay diferencias significativas c y c ++. Un uso común es que .hpp tenga las envolturas de cpp o el espacio de nombres necesarios y luego incluya .h para exponer la biblioteca de AC a c y c ++.
Yo uso ".hpp" para los encabezados C ++ y ".h" para los encabezados del lenguaje C. El ".hpp" me recuerda que el archivo contiene declaraciones para el lenguaje C ++ que no son válidas para el lenguaje C, como las declaraciones de "clase".