Extensão de arquivo de código C ++? .cc vs .cpp [fechado]


599

Eu vi o código C ++ salvo como arquivos .cce .cpp. Existe alguma diferença entre os dois?

O guia de estilo do Google parece sugerir .cc, mas não fornece explicações.

Estou preocupado principalmente com programas em sistemas Linux.


85
Conclusão Não importa. Origem possível cc = C com classes, cpp = C plus plus
Lazer

6
É importante tocar ++. Quando você atribui a ele um arquivo de cabeçalho C ++ com um nome que termina em .h, clang ++ avisa.
precisa

4
Outra ferramenta que se importa um pouco é o emacs. Com uma configuração .emacs limpa, a abertura ("localização" na linguagem emacs) um arquivo .h ativa o modo c, não o modo c ++. Claro, você pode configurar o emacs para fazer outra coisa (como em tudo no emacs), mas o que quero dizer é que o modo c é o padrão pronto para uso.
precisa

3
lintse importa, .Cé C ++ e .cé C sem nenhuma compreensão de .ccou .cpp. Pelo menos no AIX 6.1.
Jesse Chisholm #

5
Responder "não importa" não ajuda muito. A questão é totalmente relevante. O OP estava procurando uma convenção sólida para se manter. Uma resposta melhor seria: "Infelizmente, a comunidade C ++ não possui uma convenção sólida sobre isso". É triste, se você pensar sobre isso. Todos os outros idiomas populares parecem ter uma extensão de arquivo única e única. Eu me ateria ao que um projeto importante usa, como o gcc. Eles usam.cc .
Lucio Paiva

Respostas:


703

No final do dia, não importa, porque os compiladores C ++ podem lidar com os arquivos em qualquer formato. Se for um problema real dentro da sua equipe, jogue uma moeda e prossiga para o trabalho real.


89
Bem, esse é um ponto válido, mas não responde à pergunta do usuário.
vikrantt

319
cc é mais rápido digitar
Thang

50
Por que essa é a resposta aceita? Um programador mais novo não saberá que isso não importa e merece uma resposta direta.
22816 Robben_Ford_Fan_boy

14
A resposta não é absolutamente suficiente para um programador curioso e consciente. Gostaria mais da resposta nesta página, pois ela tem explicações mais detalhadas.
Novin Shahroudi

2
Quando se considera que o compilador normalmente não é a única ferramenta envolvida - quase sempre, existe um "make" ou um utilitário semelhante que se importará com quais extensões você usa, para criar regras de correspondência - então essa resposta realmente não aborda o núcleo preocupações da questão. Observe que existem variações por sistema e por cadeia de ferramentas (incluindo suas regras de criação favoritas etc.) que terão impacto na decisão. Por exemplo, o sistema de compilação multi-alvo recursivo padrão, algumas das plataformas de desenvolvimento da série QNX 6 não capturam arquivos * .cpp como fontes da linguagem C ++; -lo wantss .cc
JoGusto

296

GNU GCC reconhece todos os seguintes como arquivos C ++, e vai usar C ++ compilação independentemente de você invocá-lo através gcc ou g ++: .C, .cc, .cpp, .CPP, .c++, .cp, ou .cxx.

Observe que o .Ccaso - importa no GCC, .cé um arquivo C, enquanto que .Cé um arquivo C ++ (se você deixar o compilador decidir o que está compilando).

O GCC também suporta outros sufixos para indicar tratamento especial, por exemplo, um .iiarquivo será compilado como C ++, mas não pré-processado (destinado ao código pré-processado separadamente). Todos os sufixos reconhecidos estão detalhados em gcc.gnu.org


5
"o caso importa no GCC" - E o Windows (pois não diferencia maiúsculas de minúsculas)?
Devesh Khandelwal

17
@ Devesh: Windows também. Mas o sistema operacional impedirá que você tenha dois arquivos em uma pasta diferenciados apenas por caso.
Clifford

23
@DeveshKhandelwal Mas é caso de preservação
Yatharth Agarwal

229

Um ótimo conselho sobre o qual usar para o makefile e outras ferramentas, considerando as ferramentas que não são do compilador ao decidir sobre qual extensão usar, é uma ótima abordagem para ajudar a encontrar uma resposta que funcione para você.

Eu só queria adicionar o seguinte para ajudar com algumas informações .ccvs .cppque encontrei. A seguir, são apresentadas extensões discriminadas por diferentes ambientes (do livro "C ++ Primer Plus"):

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

GNU usos C ++: .C, .cc, .cxx, .cpp,.c++

Usos Marte Digital: .cpp,.cxx

O Borland C ++ usa: .cpp

A Watcom usa: .cpp

Visual C ++ usa o Microsoft: .cpp, .cxx,.cc

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

Os diferentes ambientes suportam extensões diferentes. Eu também estava olhando para responder a esta pergunta e encontrei este post. Com base nesta postagem, acho que posso ir com .hppe .cpppara facilitar o reconhecimento de plataforma cruzada / ferramenta cruzada.


5
Essa resposta é mais próxima do que outras na tentativa de resolver a questão apresentada, que é sobre alguém que procura uma convenção sólida para se manter. Outras línguas têm isso, mas no que diz respeito à extensão do arquivo, o C ++ parece faltar.
Lucio Paiva

6
Em que sentido o Unix não usa .cpp?
Keith Thompson

vc ++ 6.0 não suporta arquivo .cc.
xus 13/01/19

@KeithThompson cehck resposta de usuário user181548
Spyros Mourelatos

@SpyrosMourelatos Sim, mas ainda é o caso do código C ++ em sistemas similares ao Unix usar muito comumente .cpppara arquivos de origem C ++. (A resposta citada observa que "cpp" é a abreviação do pré-processador C.)
Keith Thompson

79

.cppé a extensão recomendada para C ++, tanto quanto eu sei. Algumas pessoas até recomendam o uso .hppde cabeçalhos C ++, apenas para diferenciar C.

Embora o compilador não se importe com o que você faz, é uma preferência pessoal.


60
Decidi mudar de .h para .hpp para cabeçalhos de c ++; principalmente porque outras ferramentas como editores também precisam saber - Além disso, ao usar cabeçalhos pré-compilados com o gcc, o padrão é usar C para arquivos .h e C ++ para arquivos .hpp, a menos que você use a opção '-x c ++ - header' ao pré-compilar um arquivo .h.
Jdkoftinoff 9/10/09

5
@jd. Acordado. Isso torna as ferramentas automatizadas um pouco mais fáceis se os arquivos h / c se transformarem em arquivos hpp / cpp.
217 Paul Paul Nathan

4
O g ++ não reconhece .hpp como um cabeçalho C ++ (para pré-compilação de cabeçalho), mas .hh. Por causa disso, acabei usando .cc / .hh sobre .cpp / .hpp, pois realmente não há nenhuma diferença real.
Tronic


3
@CharlesAddis - Sim, tive que converter muitos códigos que tinham "abcd.H" (a interface c ++) e "abcd.h" (a interface C) no mesmo diretório para "abcd.hpp" e "abcd.h "porque apenas fazendo um 'svn co' ou descompacte em uma caixa de Windows ou caixa de Mac oS X (com sistema de arquivos padrão) seria um fracasso devido aos 'nomes de arquivos duplicados'
jdkoftinoff

37

Eu pessoalmente uso a .ccextensão para arquivos de implementação, .hhpara cabeçalhos e .inlpara inline / modelos.

Como dito anteriormente, é principalmente uma questão de gosto.

Pelo que vi , .ccparece ser mais " orientado a projetos de código aberto ", como é recomendado em alguns grandes estilos de codificação de software de código aberto. cppparece ser mais janelas.

--- EDITAR

Como mencionado, isso é "pelo que eu vi" , pode estar errado. É que todos os projetos do Windows em que trabalhei usaram .cppe muitos projetos de código aberto (que são principalmente do tipo unix) são usados .cc.

Exemplos de estilos de codificação usando .cc:


1
você tem uma referência a isso? Eu nunca vi OSS .cc vs o Windows .cpp
Bobby

6
O Visual Studio cria arquivos .cpp para C ++. Não conheço a história por trás disso.
Natan Yellin

7
O LLVM Coding Standard parece advogar por .cpp / .he colocar -*- C++ -*-tags nos cabeçalhos llvm.org/docs/CodingStandards.html ; O Estilo de Codificação Mozilla sugere .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; O KDE parece estar usando .cpp / .h too quickgit.kde.org
sastanin

19

Outras extensões de arquivo usadas incluem .cxxe .C(C maiúsculo). Acredito que Bjarne Stroustrup usou .Coriginalmente. .cppé o nome do pré-processador C, portanto, é lamentável que ele tenha sido usado também para C ++.


13

A outra opção é .cxxonde xé suposto que seja um 45 ° girado mais.

Windows, Mac e Linux suportam, .c++então devemos usá-lo.


12

Várias pessoas dizendo .ccnão significam nada? Poderia. C ++ começou a vida como "C com classes".

Verdade que .cce .cppsão também nomes de comandos na maioria dos sistemas Unix (compilador C e C pré-processador, respectivamente).

Uso .cppexclusivamente, mas iniciei no Windows. .ccé mais uma convenção do Unix, embora eu a veja cada vez menos. O GNU make possui regras para .cppque, provavelmente, seja o preferido, ele funcionará por padrão no Windows e em todo o resto. Por outro lado, o C ++ moderno não usa nenhuma extensão para cabeçalhos, eu realmente não gosto disso. Todos os meus projetos usam .harquivos de cabeçalho e suportam tanto C quanto C ++, tanto quanto possível, via extern "C"testes __cplusplus.


2
não deveria ser .cwc então? :)
Joshua

Antes de muitos compiladores oferecerem suporte a namespaces, eles também usavam a extensão .h para cabeçalhos padrão. Geralmente, os compiladores fornecem versões .h obsoletas que colocam a biblioteca no espaço para nome global. Isso permite o suporte ao código legado. Li em algum lugar uma vez que o motivo pelo qual eles não têm extensões .h é que o padrão permite que eles não sejam arquivos, mas essencialmente 'embutidos'. No entanto, isso pode ser apócrifo.
Clifford

11

Basta seguir a convenção usada pelo projeto / equipe.


11

Eu pessoalmente nunca vi .ccnenhum projeto em que trabalhei, mas com toda a tecnicidade o compilador não se importa.

Quem se importará com os desenvolvedores que trabalham na sua fonte, portanto, minha regra geral é seguir com o que sua equipe está confortável. Se sua "equipe" é a comunidade de código aberto, escolha algo muito comum, do qual .cppparece ser o favorito.


Vários projectos conhecido poços como github.com/google/googletest está usando .cccomo uma extensão de arquivo für arquivos de implementação C ++
Vertexwahn

10

Como na maioria das convenções de estilo, existem apenas duas coisas importantes:

  1. Seja consistente no que usar, sempre que possível.
  2. Não projete nada que dependa de uma escolha específica sendo usada.

Isso pode parecer contraditório, mas cada um deles tem valor por suas próprias razões.


8

.Ce .ccparece ser o padrão para os (poucos) programas C ++ orientados a Unix que eu já vi. Eu sempre .cppme usei , já que realmente só trabalho no Windows e esse tem sido o padrão lá desde sempre.

Eu recomendo .cpppessoalmente, porque ... significa "C Plus Plus". É claro que é de vital importância que as extensões de arquivo sejam siglas, mas se essa justificativa se provar insuficientemente convincente, outras coisas importantes são o não uso da tecla shift (que exclui .Ce .c++) e a prevenção de metacaracteres de expressão regular sempre que possível (que exclui .c++- infelizmente você não pode realmente evitar o .curso.).

Isso não descarta .cc, portanto, mesmo que realmente não represente nada (ou não?), É provavelmente uma boa opção para código orientado ao Linux.


2
Mas "cpp" também pode significar "pré-processador C". Na verdade, o "CPP" programa em seu sistema é mais provável que o pré-processador C ...
Jesper

8

Eu usei .C e .h para fonte e cabeçalho, respectivamente. Uma coisa legal dessa escolha é que, na linha de comando, é fácil usar *.[Ch]para selecionar todos os arquivos de código. O uso .Cpode ser um problema em sistemas de arquivos que não diferenciam maiúsculas de minúsculas, mas se você tiver foo.ce foo.Cno mesmo diretório, você merece o que recebe de qualquer maneira :)


8

A extensão .cc é necessária para o uso de regras implícitas nos makefiles. Examine esses links para entender melhor os makefiles, mas observe principalmente o segundo, pois ele diz claramente a utilidade da extensão .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

Acabei de saber disso agora.


Novamente, são apenas .cpparquivos. Não se preocupe ! :-)
Tom Taylor

1
Ele diz "Recomendamos que você use o sufixo '.cc' para arquivos de origem C ++ em vez de '.C'." Eu suspeito que isso é apenas uma formulação ruim. O uso .Cpode ser problemático em sistemas com sistemas de arquivos que não diferenciam maiúsculas de minúsculas. Eu não acho que exista qualquer vantagem em particular, no que diz makerespeito ao uso .ccexcessivo .cpp, por exemplo. Makefiles funcionam bem com .cpparquivos de origem C ++.
Keith Thompson

7

Não importa qual dessas extensões você usaria. Escolha o que você mais gosta, apenas seja consistente com a nomeação. A única exceção que conheço com esta convenção de nomenclatura é que eu não poderia fazer WinDDK(ou é WDKagora?) Para compilar .ccarquivos. No Linux, isso dificilmente é um problema.


6

Estou iniciando um novo projeto C ++ e comecei a procurar as mais recentes no estilo C ++. Acabei aqui com relação à nomeação de arquivos e pensei em compartilhar como fiz minha escolha. Aqui vai:

Stroustrup vê isso mais como uma consideração comercial do que técnica .

Seguindo seus conselhos, vamos verificar o que as cadeias de ferramentas esperam.

Para UNIX / Linux, você pode interpretar as seguintes regras padrão do GNU make como favorecendo o sufixo .cc, pois as regras .cpp e .C são apenas aliases:

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

(Nota: não há alias COMPILE.cxx padrão)

Portanto, se você estiver direcionado ao UNIX / Linux, .cc e .cpp são opções muito boas.

Ao segmentar o Windows, você está procurando problemas com o .C, pois o sistema de arquivos não diferencia maiúsculas de minúsculas. E pode ser importante observar que o Visual Studio favorece o sufixo .cpp

Ao segmentar o macOS, observe que o Xcode prefere .cpp / .hpp (apenas verificado no Xcode 10.1). Você sempre pode alterar o modelo de cabeçalho para usar .h.

Pelo que vale a pena, você também pode basear sua decisão nas bases de código que desejar. O Google usa .cc e o LLVM libc ++ usa .cpp, por exemplo.

E os arquivos de cabeçalho? Eles são compilados no contexto de um arquivo C ou C ++, portanto, não há nenhum sistema de compilação ou compilação necessário para distinguir .h de .hpp. O destaque da sintaxe e o recuo automático do editor / IDE podem ser um problema, no entanto, mas isso é corrigido ao associar todos os arquivos .h ao modo C ++. Como exemplo, minha configuração do emacs no Linux carrega todos os arquivos .h no modo C ++ e edita os cabeçalhos em C. Além disso, ao misturar C e C ++, você pode seguir este conselho .

Minha conclusão pessoal : .cpp / .h é o caminho de menor resistência.


3

Como outros escreveram antes de mim, no final é o que está sendo usado pelo seu projeto / equipe / empresa.

Pessoalmente, não estou usando ccextensão, estou tentando diminuir o número de extensões e não aumentá-las, a menos que haja um valor claro (na minha opinião).

Para que vale a pena, é isso que estou usando :

c - Somente código C puro, sem classes ou estruturas com métodos.

cpp - código C ++

hpp- Código apenas de cabeçalhos. As implementações estão nos cabeçalhos (como as classes de modelo)

h- arquivos de cabeçalho para C / C ++. Concordo que outra distinção pode ser feita, mas, como escrevi, estou tentando diminuir o número de extensões para simplificar. Pelo menos nos projetos em C ++ em que trabalhei, os harquivos para C puro são mais raros; portanto, não queria adicionar outra extensão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.