Extensión de archivo de código C ++? .cc vs .cpp [cerrado]

599

He visto el código C ++ guardado como ambos .ccy como .cpparchivos. ¿Hay diferencia entre los dos?

La guía de estilo de Google parece sugerir .cc, pero no proporciona ninguna explicación.

Me interesan principalmente los programas en sistemas Linux.

Jessica
fuente
85
Conclusión No importa. Origen posible cc = C con clases, cpp = C plus plus
Lazer
66
Es importante hacer sonar ++. Cuando le da un archivo de encabezado C ++ con un nombre que termina en .h, clang ++ le advierte.
allyourcode el
44
Otra herramienta que le importa un poco es emacs. Con una configuración limpia .emacs, al abrir ("buscar" en el lenguaje de emacs) un archivo .h activa el modo c, no el modo c ++. Por supuesto, puede configurar emacs para hacer otra cosa (como con todo en emacs), pero mi punto es que el modo c es el valor predeterminado predeterminado.
allyourcode el
3
lintle importa, .Ces C ++ y .ces C sin ningún tipo de comprensión de .cco .cpp. Al menos en AIX 6.1.
Jesse Chisholm
55
Responder "no importa" realmente no ayuda. La pregunta es totalmente relevante. El OP estaba buscando una convención sólida a la que apegarse. Una mejor respuesta sería: "Desafortunadamente, la comunidad C ++ no tiene una convención sólida sobre esto". Es triste, si lo piensas. Todos los demás lenguajes populares parecen tener una única extensión de archivo única. Me apegaría a lo que usa un proyecto importante, como gcc. Utilizan.cc .
Lucio Paiva

Respuestas:

702

Al final del día, no importa porque los compiladores de C ++ pueden manejar los archivos en cualquier formato. Si es un problema real dentro de su equipo, tire una moneda y continúe con el trabajo real.

JaredPar
fuente
89
Bueno, ese es un punto válido, pero no responde la pregunta del usuario.
vikrantt
319
cc es más rápido de escribir
thang
50
¿Por qué es esta la respuesta aceptada? Un programador más nuevo no sabrá que no importa y se merece una respuesta directa.
Robben_Ford_Fan_boy
14
La respuesta no es suficiente para un programador curioso y atento. Me gustaría más la respuesta en esta página ya que tiene explicaciones más detalladas.
Novin Shahroudi
2
Cuando se considera que el compilador no suele ser la única herramienta involucrada, casi siempre, hay "make" o una utilidad similar que se ENCARGARÁ de las extensiones que utiliza, para la coincidencia de reglas de compilación, entonces esta respuesta realmente no aborda el núcleo preocupaciones de la pregunta. Tenga en cuenta que existen variaciones por sistema y cadena de herramientas (incluidas sus reglas de creación favoritas, etc.) que tendrán un impacto en la decisión. Por ejemplo, el sistema de compilación recursivo multi-objetivo predeterminado, algunas de las plataformas de desarrollo de la serie QNX 6 no captan archivos * .cpp como fuentes de lenguaje C ++; quiere .cc
JoGusto
296

GNU GCC reconoce todos los siguientes archivos como C ++, y utilizará C ++ compilación independientemente de si se invoca a través de gcc o g ++: .C, .cc, .cpp, .CPP, .c++, .cp, o .cxx.

Tenga en cuenta que el .Ccaso es importante en GCC, .ces un archivo C mientras que .Ces un archivo C ++ (si deja que el compilador decida qué está compilando).

GCC también admite otros sufijos para indicar un manejo especial, por ejemplo, un .iiarchivo se compilará como C ++, pero no se procesará previamente (destinado a código preprocesado por separado). Todos los sufijos reconocidos se detallan en gcc.gnu.org

Clifford
fuente
55
"mayúsculas y minúsculas en GCC" - ¿Qué pasa con Windows (ya que no distingue entre mayúsculas y minúsculas)?
Devesh Khandelwal
17
@Devesh: Windows también. Pero el sistema operativo le impedirá tener dos archivos en una carpeta que se distinguen solo por mayúsculas y minúsculas.
Clifford
23
@DeveshKhandelwal Pero preserva los casos
Yatharth Agarwal
229

Un gran consejo sobre qué usar para el archivo MAKE y otras herramientas, teniendo en cuenta las herramientas que no son compiladoras mientras decide qué extensión usar es un gran enfoque para ayudarlo a encontrar una respuesta que funcione para usted.

Solo quería agregar lo siguiente para ayudar con la información .ccvs .cppque encontré. Las siguientes son extensiones desglosadas por diferentes entornos (del libro "C ++ Primer Plus"):

Unix: usos .C, .cc, .cxx,.c

C de GNU utiliza ++: .C, .cc, .cxx, .cpp,.c++

Marte usos digitales: .cpp,.cxx

Borland C ++ utiliza: .cpp

Watcom utiliza: .cpp

Microsoft Visual C ++: usos .cpp, .cxx,.cc

Metrowerks CodeWarrior usos: .cpp, .cp, .cc, .cxx,.c++

Los diferentes entornos admiten diferentes extensiones. Yo también estaba buscando responder esta pregunta y encontré esta publicación. Basado en esta publicación, creo que podría ir con .hppy .cpppara facilitar el reconocimiento multiplataforma / herramienta cruzada.

John S.
fuente
55
Esta respuesta es más cercana que otras al tratar realmente de abordar la pregunta presentada, que trata sobre alguien que busca una convención sólida a la que apegarse. Otros lenguajes tienen eso, pero en lo que respecta a la extensión de archivo, C ++ parece carecer de él.
Lucio Paiva
66
¿En qué sentido no utiliza Unix .cpp?
Keith Thompson el
vc ++ 6.0 no es compatible con el archivo .cc.
xus
@KeithThompson cehck respuesta del usuario user181548
Spyros Mourelatos
@SpyrosMourelatos Sí, pero sigue siendo el caso que el código C ++ en sistemas tipo Unix se usa muy comúnmente .cpppara archivos fuente C ++. (La respuesta citada señala que "cpp" es la abreviatura del preprocesador C).
Keith Thompson,
79

.cppes la extensión recomendada para C ++ hasta donde yo sé. Algunas personas incluso recomiendan usar .hpppara encabezados C ++, solo para diferenciarse de C.

Aunque al compilador no le importa lo que haces, es una preferencia personal.

Ryu
fuente
6060
Decidí cambiar de usar .h a usar .hpp para encabezados c ++; principalmente porque otras herramientas como los editores también deben saberlo: además, cuando se usan encabezados precompilados con gcc, el valor predeterminado es usar C para archivos .h y C ++ para archivos .hpp a menos que use la opción '-x c ++ - encabezado' cuando precompila un archivo .h.
jdkoftinoff
55
@jd. Convenido. Hace que las herramientas automatizadas sean un poco más fáciles si los archivos h / c se convierten en archivos hpp / cpp.
Paul Nathan
44
g ++ no reconoce .hpp como un encabezado de C ++ (para la precompilación del encabezado) pero .hh sí. Debido a esto terminé usando .cc / .hh sobre .cpp / .hpp ya que realmente no hay ninguna diferencia real.
Tronic
3
@CharlesAddis: Sí, tuve que convertir un montón de código que tenía "abcd.H" (la interfaz c ++) y "abcd.h" (la interfaz C) en el mismo directorio a "abcd.hpp" y "abcd.h "porque simplemente hacer un" svn co "o descomprimir en un cuadro de Windows o cuadro de Mac OS X (con el sistema de archivos predeterminado) fallaría debido a los" nombres de archivo duplicados "
jdkoftinoff
37

Personalmente uso la .ccextensión para archivos de implementación, .hhencabezados y .inlen línea / plantillas.

Como se dijo antes, es principalmente una cuestión de gustos.

Por lo que he visto , .ccparece ser más " orientado a proyectos de código abierto ", como se recomienda en algunos excelentes estilos de codificación de software de código abierto. cppParece ser más Windowish.

--- EDITAR

Como se mencionó, esto es "por lo que he visto" , puede estar equivocado. Es solo que todos los proyectos de Windows en los que he trabajado usaron .cpp, y muchos proyectos de código abierto (que están principalmente en me gusta de Unix).cc .

Ejemplos de estilos de codificación utilizando .cc :

Aurélien Vallée
fuente
1
¿Tienes alguna referencia a esto? Nunca he visto OSS .cc vs Windows .cpp
bobby
66
Visual Studio crea archivos .cpp para C ++. No sé la historia detrás de esto.
Natan Yellin
77
LLVM Coding Standard parece abogar por .cpp / .h y poner la -*- C++ -*-etiqueta en los encabezados llvm.org/docs/CodingStandards.html ; Mozilla Coding Style sugiere .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; KDE parece estar usando .cpp / .h too quickgit.kde.org
sastanin
19

Otras extensiones de archivo utilizadas incluyen .cxxy .C(mayúscula C). Creo que Bjarne Stroustrup usó .Coriginalmente. .cppes el nombre del preprocesador C, por lo que es lamentable que también se haya utilizado para C ++.

usuario181548
fuente
13

La otra opción es .cxxdonde xse supone que es un plus girado 45 °.

Windows, Mac y Linux son compatibles, .c++por lo que deberíamos usar eso.

FigBug
fuente
12

Varias personas diciendo .cc no significan nada? Que podría. C ++ comenzó su vida como "C con clases".

Es cierto que .ccy.cpp son también los nombres de comandos en la mayoría de los sistemas Unix (compilador de C y C preprocesador respectivamente).

Lo uso .cppexclusivamente, pero comencé en Windows. .cces más una convención de Unix, aunque lo veo cada vez menos allí. GNU make tiene reglas para .cpplo que probablemente sea preferible, funcionará de manera predeterminada tanto en Windows como en todo lo demás. Por otro lado, C ++ moderno no usa ninguna extensión para los encabezados, realmente no me gusta eso. Todos mis proyectos se utilizan .hpara archivos de encabezado, y admiten tanto C como C ++ tanto como sea posible a través de extern "C"y pruebas __cplusplus.

Ben Voigt
fuente
2
¿No debería ser eso .cwc entonces? :)
Joshua
Antes de que muchos compiladores admitieran espacios de nombres, también usaban la extensión .h para encabezados estándar. Comúnmente, los compiladores proporcionan versiones .h obsoletas que colocan la biblioteca en el espacio de nombres global. Esto permite el soporte de código heredado. Una vez leí en alguna parte que la razón por la que no tienen extensiones .h es que el estándar les permite no ser archivos, sino esencialmente 'incorporados'. Sin embargo, eso puede ser apócrifo.
Clifford el
11

Simplemente siga la convención utilizada por el proyecto / equipo.

Ben S
fuente
11

Yo personalmente nunca he visto .cc en ningún proyecto en el que haya trabajado, pero en todos los aspectos técnicos al compilador no le importará.

A quién le importarán los desarrolladores que trabajen en su fuente, por lo que mi regla general es elegir con qué se siente cómodo su equipo. Si su "equipo" es la comunidad de código abierto, elija algo muy común, que .cppparece ser el favorito.

Toji
fuente
Varios proyectos conocidos como github.com/google/googletest se están utilizando .cccomo una extensión de archivo para archivos de implementación C ++
Vertexwahn
10

Como con la mayoría de las convenciones de estilo, solo hay dos cosas importantes:

  1. Sea consistente en lo que usa, siempre que sea posible.
  2. No diseñe nada que dependa de una elección específica que se utilice.

Puede parecer que contradicen, pero cada uno tiene valor por sus propios motivos.

Alan
fuente
8

.Cy .ccparece ser estándar para los (pocos) programas C ++ orientados a Unix que he visto. Siempre me he usado .cpp, ya que realmente solo trabajo en Windows y ese ha sido el estándar allí desde siempre.

Lo recomiendo .cpppersonalmente, porque ... significa "C Plus Plus". Por supuesto, es de vital importancia que las extensiones de archivo sean acrónimos, pero si este razonamiento resulta insuficientemente convincente, otras cosas importantes son el no uso de la tecla Mayús (que excluye .Cy .c++) y la evitación de metacaracteres de expresión regular cuando sea posible (que descarta .c++) desafortunadamente no puedes evitar el. por supuesto).

Esto no descarta .cc, por lo que, aunque en realidad no representa nada (¿o sí?), Probablemente sea una buena opción para el código orientado a Linux.

por favor borrame
fuente
2
Pero "cpp" también podría significar "preprocesador C". De hecho, el programa "cpp" en su sistema es probablemente el preprocesador C ...
Jesper
8

He usado .C y .h para fuente y encabezado, respectivamente. Una buena cosa con esa elección es que, en la línea de comandos, es fácil de usar *.[Ch]para seleccionar todos los archivos de código. El uso .Cpodría ser un problema en los sistemas de archivos que no distinguen entre mayúsculas y minúsculas, pero si tiene foo.cy foo.Cen el mismo directorio, se merece lo que obtiene de todos modos :)

KeithB
fuente
8

La extensión .cc es necesaria para usar reglas implícitas dentro de los archivos MAKE. Mire a través de estos enlaces para obtener una mejor comprensión de los archivos MAKE, pero busque principalmente el segundo, ya que claramente dice la utilidad de la extensión .cc:

ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_2.html

https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html

Acabo de enterarme de esto ahora.

Kyle
fuente
De nuevo son solo .cpparchivos. Sin preocupaciones ! :-)
Tom Taylor
1
Dice "Lo alentamos a usar el sufijo '.cc' para archivos fuente C ++ en lugar de '.C'". Sospecho que es solo una mala redacción. El uso .Cpuede ser problemático en sistemas con sistemas de archivos que no distinguen entre mayúsculas y minúsculas. No creo que haya ninguna ventaja particular, en lo que makerespecta, en el uso de .ccover .cpp, por ejemplo. Los Makefiles funcionan bien con .cpparchivos fuente C ++.
Keith Thompson el
7

No importa cuál de esas extensiones usarías. Elija el que más le guste, solo sea coherente con los nombres. La única excepción que conozco con esta convención de nomenclatura es que no pude hacer WinDDK(¿o es WDKahora?) Para compilar .ccarchivos. En Linux, aunque eso no es un problema.

Dmitry
fuente
6

Estoy comenzando un nuevo proyecto C ++ y comencé a buscar lo último en estilo C ++. Terminé aquí con respecto a la denominación de archivos y pensé que compartiría cómo se me ocurrió mi elección. Aquí va:

Stroustrup ve esto más como una consideración comercial que técnica .

Siguiendo su consejo, verifiquemos qué esperan las cadenas de herramientas.

Para UNIX / Linux, puede interpretar las siguientes reglas predeterminadas de creación de GNU que favorecen el sufijo de nombre de archivo .cc, ya que las reglas .cpp y .C son solo alias:

$ make -p | egrep COMPILE[^=]+=
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.cpp = $(COMPILE.cc)
COMPILE.C = $(COMPILE.cc)

(Nota: no hay un alias COMPILE.cxx predeterminado)

Entonces, si está apuntando a UNIX / Linux, tanto .cc como .cpp son muy buenas opciones.

Al apuntar a Windows, está buscando problemas con .C, ya que su sistema de archivos no distingue entre mayúsculas y minúsculas. Y puede ser importante que tenga en cuenta que Visual Studio favorece el sufijo .cpp

Al apuntar a macOS, tenga en cuenta que Xcode prefiere .cpp / .hpp (recién verificado en Xcode 10.1). Siempre puede cambiar la plantilla de encabezado para usar .h.

Por lo que vale, también puede basar su decisión en las bases de código que desee. Google usa .cc y LLVM libc ++ usa .cpp, por ejemplo.

¿Qué pasa con los archivos de encabezado? Se compilan en el contexto de un archivo C o C ++, por lo que no hay necesidad de compilar o compilar el sistema para distinguir .h de .hpp. Sin embargo, el resaltado de sintaxis y la sangría automática de su editor / IDE pueden ser un problema, pero esto se soluciona asociando todos los archivos .h a un modo C ++. Como ejemplo, mi configuración de emacs en Linux carga todos los archivos .h en modo C ++ y edita los encabezados C muy bien. Más allá de eso, al mezclar C y C ++, puede seguir este consejo .

Mi conclusión personal : .cpp / .h es el camino de menor resistencia.

Armadura
fuente
3

Como otros escribieron antes que yo, al final es lo que está utilizando su proyecto / equipo / empresa.

Personalmente, no estoy usando cc extensión, estoy tratando de reducir el número de extensiones y no aumentarlas, a menos que haya un valor claro (en mi opinión).

Por lo que vale, esto es lo que estoy usando :

c - Solo código C puro, sin clases o estructuras con métodos.

cpp - código C ++

hpp- Código de solo encabezados. Las implementaciones están en los encabezados (como las clases de plantilla)

h- archivos de encabezado para C / C ++. Estoy de acuerdo en que se puede hacer otra distinción, pero como escribí, estoy tratando de reducir el número de extensiones para simplificar. Al menos de los proyectos de C ++ en los que he trabajado, los harchivos para pure-C son más raros, por lo tanto, no quería agregar otra extensión.

TCS
fuente