.cc ou .cpp: qual extensão escolher para código em C++?

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Uma linguagem — dezenas de extensões

\n\n

Se você está começando a aprender C++, provavelmente já se deparou com esta situação: você olha um tutorial ou um exemplo de código no GitHub, e os arquivos são chamados de main.cpp, utils.cc, e às vezes até program.cxx ou source.C. Surge a pergunta natural: "Qual é a diferença? São linguagens diferentes? Ou apenas um capricho de alguém?"

\n\n

Você não está sozinho. No Stack Overflow, a pergunta "C++ code file extension? What is the difference between .cc and .cpp" acumulou centenas de milhares de visualizações. E não é surpresa: mesmo desenvolvedores experientes às vezes se confundem com esses detalhes aparentemente pequenos. Hoje, vamos resolver esse quebra-cabeça de uma vez por todas. Você descobrirá de onde vieram as diferentes extensões, se há alguma diferença técnica entre elas e qual extensão um iniciante deve escolher.

\n\n

Resposta rápida: não há diferença técnica

\n\n

Vamos logo tirar a maior dúvida. Do ponto de vista do compilador e da linguagem C++, não há absolutamente nenhuma diferença entre .cc e .cpp. São apenas duas maneiras diferentes de informar ao sistema operacional e às ferramentas de compilação que o que está à frente é código-fonte em C++.

\n\n

Os compiladores (GCC, Clang, MSVC) entendem ambas as extensões. Você pode pegar um arquivo hello.cc, renomeá-lo para hello.cpp e compilá-lo sem qualquer alteração no código. Aqui está um exemplo simples:

\n\n
// Arquivo: hello.cc\n#include <iostream>\n\nint main() {\n    std::cout << "Olá do arquivo .cc!" << std::endl;\n    return 0;\n}
\n\n

Você pode compilá-lo assim:

\n
g++ hello.cc -o hello
\n\n

Agora vamos renomeá-lo para hello.cpp:

\n
g++ hello.cpp -o hello
\n\n

O resultado será idêntico. O compilador não se importa com o nome do arquivo — o que importa é apenas o seu conteúdo e que você especificou explicitamente a linguagem (ou o compilador a deduziu pela extensão).

\n\n

História de origem: de onde vieram .cc e .cpp?

\n\n

Para entender por que existem tantas extensões, precisamos olhar para a história. O C++ foi criado como uma extensão da linguagem C. Os primeiros compiladores (como o Cfront) eram apenas pré-processadores que traduziam C++ para C comum.

\n\n

Extensão .cc — herança Unix

\n

Nos sistemas operacionais da família Unix (e em particular, nas primeiras versões do AT&T Unix), havia a tradição de usar extensões curtas de dois caracteres. Isso estava relacionado às limitações dos sistemas de arquivos: por exemplo, no s5fs (System V), o comprimento do nome do arquivo era bastante limitado. Assim surgiram:

\n
    \n
  • .c — para arquivos C
  • \n
  • .cc — para arquivos C++ (C + C = CC)
  • \n
  • .h — para arquivos de cabeçalho
  • \n
\n

A extensão .cc tornou-se o padrão de facto no mundo Unix e Linux. Muitos projetos grandes (como Google Chromium, LLVM) ainda a utilizam hoje.

\n\n

Extensão .cpp — era DOS e Windows

\n

Quando o C++ começou a ganhar popularidade no mundo dos PCs, surgiu o ecossistema DOS e das primeiras versões do Windows. As limitações eram outras, mas surgiu uma necessidade diferente: tornar a extensão o mais clara possível. .cpp significa C Plus Plus — uma referência direta à linguagem. Esta extensão tornou-se popular graças a:

\n
    \n
  • Ambiente de desenvolvimento Borland C++
  • \n
  • Microsoft Visual C++
  • \n
  • Tutoriais e livros sobre C++ (para que iniciantes entendessem imediatamente com o que estavam lidando)
  • \n
\n\n

Outras extensões viajantes

\n

Além dos dois principais candidatos, no mundo C++ podemos encontrar outras extensões:

\n
    \n
  • .cxx — outra variação de "C++", popular em alguns sistemas Unix (por exemplo, IBM AIX)
  • \n
  • .C (C maiúsculo) — usado por alguns compiladores para diferenciar C (.c) de C++ (.C) em sistemas onde a caixa das letras é relevante (por exemplo, em sistemas antigos

Blogs

Book Recommendations