HOWTO · C++

Diferencia entre las extensiones de archivo .cc y .cpp en C++

Aprenda a elegir entre archivos fuente .cc y .cpp de C++, compilar ambas extensiones con GCC y evitar problemas de compilación al renombrarlos.

En esta página

Para archivos fuente normales de C++, .cc y .cpp son convenciones de nombre, no lenguajes C++ distintos. Use la extensión que ya emplea el proyecto o sus herramientas de compilación; en un proyecto nuevo, elija una y úsela de forma coherente. GCC reconoce ambas como entradas de C++.

Compilar ambas extensiones con GCC

Guarde este programa como main.cc o main.cpp:

#include <iostream>
int main() { std::cout << "C++\n"; }

Compile y ejecute ambos nombres con g++:

g++ -std=c++23 main.cc -o cc.out && ./cc.out
g++ -std=c++23 main.cpp -o cpp.out && ./cpp.out

Ambos comandos muestran:

C++

El resultado se verificó en Linux con g++ (Ubuntu 15.2.0-16ubuntu1) 15.2.0. La documentación de opciones generales de GCC enumera .cc y .cpp como sufijos de código fuente C++. El ejemplo requiere GCC/g++ con soporte para C++23; use el estándar que requiera su proyecto si es otro.

Qué cambia la extensión

La extensión ayuda al controlador del compilador o a la herramienta de compilación a clasificar una entrada. No convierte el código de un archivo en una variante diferente de C++. Un archivo .cc o .cpp puede contener un programa completo, funciones o código de implementación de declaraciones de un encabezado; ninguna de las dos extensiones exige usar encabezados o clases.

El estándar de C++ no obliga a usar una extensión concreta. Los controladores y las herramientas definen sus reglas de reconocimiento, por lo que la convención de un repositorio existente importa más que una regla general por sistema operativo.

Elegir .cc o .cpp en un proyecto

Situación Elección práctica
El repositorio y los archivos de compilación ya usan una extensión Siga esa extensión.
Una regla del proyecto exige .cc Use .cc; por ejemplo, la guía de estilo de C++ de Google lo especifica para el código fuente C++.
Un proyecto nuevo no tiene regla Elija .cc o .cpp y aplíquelo de forma consistente.

Ninguna de las dos es más portable solo por asociarse a un sistema operativo. Revise el compilador, IDE y configuración de compilación reales del proyecto.

No use .c como nombre habitual de C++

Aquí importa el controlador. La tabla general de sufijos de GCC clasifica .c como entrada C. Sin embargo, la documentación del controlador g++ indica que g++ trata .c, .h e .i como C++ salvo que -x anule el lenguaje. En el host verificado, este comando compiló el mismo programa C++ llamado main.c:

g++ -std=c++23 main.c -o c.out && ./c.out

Mostró C++. En cambio, gcc -std=c23 main.c -o gcc-c.out falló para ese programa porque el controlador C lo trató como C y no encontró el encabezado C++ iostream.

Por ello, no nombre .c a las fuentes C++ habituales: el resultado puede depender del controlador que invoque la compilación. Si necesita anular la inferencia, GCC acepta -x c++ y la guía de comandos de Clang documenta -x para especificar el lenguaje de las entradas posteriores. MSVC documenta /Tp para forzar que un archivo sea C++. La configuración exacta del sistema de compilación puede variar.

Actualizar la compilación al renombrar

Renombrar main.cc como main.cpp puede fallar aunque el código no cambie. CMake, reglas Make, archivos de proyecto del IDE, patrones de nombres, entradas generadas y scripts pueden enumerar el nombre anterior o aceptar solo una extensión. Actualice esas referencias y reconstruya el proyecto para comprobar el cambio.

Como siguiente paso, vea cómo usar varios archivos de código en C++.