Introducción: Un lenguaje, decenas de extensiones
\n\nSi estás empezando a aprender C++, seguramente te has encontrado con esta situación: ves un tutorial o un ejemplo de código en GitHub, y los archivos se llaman main.cpp, utils.cc, o incluso program.cxx o source.C. Surge la pregunta lógica: "¿Cuál es la diferencia? ¿Son lenguajes diferentes? ¿O es solo un capricho de alguien?"
No estás solo. En Stack Overflow, la pregunta "C++ code file extension? What is the difference between .cc and .cpp" ha acumulado cientos de miles de visitas. Y no es de extrañar: incluso los desarrolladores experimentados a veces se confunden con estos detalles aparentemente menores. Hoy vamos a resolver este rompecabezas de una vez por todas. Aprenderás de dónde vienen las diferentes extensiones, si hay alguna diferencia técnica entre ellas y qué extensión debería elegir un principiante.
\n\nRespuesta breve: no hay diferencia técnica
\n\nVamos a aclarar el punto principal de inmediato. Desde el punto de vista del compilador y del lenguaje C++, no hay absolutamente ninguna diferencia entre .cc y .cpp. Son solo dos formas diferentes de indicarle al sistema operativo y a las herramientas de compilación que se trata de código fuente en C++.
Los compiladores (GCC, Clang, MSVC) entienden ambas extensiones. Puedes tomar un archivo hello.cc, renombrarlo a hello.cpp y compilarlo sin hacer ni un solo cambio en el código. Aquí tienes un ejemplo sencillo:
// Archivo: hello.cc\n#include <iostream>\n\nint main() {\n std::cout << "¡Hola desde un archivo .cc!" << std::endl;\n return 0;\n}\n\nSe puede compilar así:
\ng++ hello.cc -o hello\n\nY ahora lo renombramos a hello.cpp:
g++ hello.cpp -o hello\n\nEl resultado será idéntico. Al compilador no le importa cómo se llame el archivo; solo importa su contenido y que le hayas indicado explícitamente el lenguaje (o que el compilador lo deduzca por la extensión).
\n\nOrigen histórico: ¿de dónde vienen .cc y .cpp?
\n\nPara entender por qué existen tantas extensiones, hay que mirar la historia. C++ se creó como una extensión del lenguaje C. Los primeros compiladores (por ejemplo, Cfront) eran simplemente preprocesadores que traducían C++ a C normal.
\n\nLa extensión .cc — herencia de Unix
\nEn los sistemas operativos de la familia Unix (y en particular, en las primeras versiones de AT&T Unix) existía la tradición de usar extensiones cortas de dos caracteres. Esto se debía a las limitaciones de los sistemas de archivos: por ejemplo, en s5fs (System V), la longitud del nombre del archivo estaba muy restringida. Así surgieron:
\n- \n
.c— para archivos C \n .cc— para archivos C++ (C + C = CC) \n .h— para archivos de cabecera \n
La extensión .cc se convirtió en el estándar de facto en el mundo Unix y Linux. Muchos proyectos grandes (por ejemplo, Google Chromium, LLVM) todavía la utilizan.
La extensión .cpp — la era de DOS y Windows
\nCuando C++ comenzó a ganar popularidad en el mundo de las PC, surgió el ecosistema de DOS y las primeras versiones de Windows. Aquí las limitaciones eran diferentes, pero surgió otra necesidad: hacer que la extensión fuera lo más clara posible. .cpp significa C Plus Plus — una referencia directa al lenguaje. Esta extensión se popularizó gracias a:
- \n
- El entorno de desarrollo Borland C++ \n
- Microsoft Visual C++ \n
- Los tutoriales y libros de C++ (para que los principiantes entendieran de inmediato de qué se trataba) \n
Otras extensiones viajeras
\nAdemás de los dos principales candidatos, en el mundo de C++ se pueden encontrar otras extensiones:
\n- \n
.cxx— otra variante de "C++", popular en algunos sistemas Unix (por ejemplo, IBM AIX) \n .C(C mayúscula) — utilizada por algunos compiladores para distinguir entre C (.c) y C++ (.C) en sistemas donde las mayúsculas importan (por ejemplo, en sistemas antiguos