Eu tenho uma discussão com um colega meu sobre as diretrizes C ++ a seguir.
Atualmente, ele cria todas as suas bibliotecas dessa maneira:
- Ele usa letras inconsistentes em maiúsculas e minúsculas em seus nomes de arquivos
- Alguns de seus cabeçalhos não têm extensão
Acredito que não ter extensão é algo reservado para arquivos padrão do C ++ e que o uso de letras maiúsculas é suscetível a erros (especialmente quando você lida com código que deve funcionar tanto no Windows quanto no Linux).
Seu argumento é que ele segue as Qt
convenções (mesmo para o código que não usa Qt) e continua dizendo: "Se o Qt faz dessa maneira, então não pode ser ruim".
Agora tento manter a mente aberta, mas me sinto muito mal quando tenho que trabalhar / com suas bibliotecas. Existe um conjunto comum de regras estabelecidas sobre isso? O padrão diz algo sobre isso?
Muito obrigado.
#define signal
……… ("Se o Qt fizer dessa maneira, não poderá ser ruim.") - Não posso dizer que concordo pessoalmente com todas as opções de design.Qt
. Eu até acho que é uma biblioteca incrível, mas algumas de suas opções de design realmente me parecem erradas._
no código popular e amplamente usado, mas é definitivamente contra o padrão.*.hpp
para um cabeçalho c ++, e todas as minhas ferramentas "obtê-lo".Respostas:
A extensão (ou falta de) não vai causar, até onde sei, problemas. Eu diria que descartar completamente a extensão é inconveniente, pois dificulta a pesquisa de arquivos de cabeçalho (por exemplo, com os curingas *. He *. Hpp) e torna mais difícil identificar o conteúdo de um arquivo (por exemplo, se seu editor depende da extensão para escolher o modo de destaque de sintaxe apropriado).
Do ponto de vista do código, não faz muita diferença, mesmo a caixa não é problemática, desde que você use um caso consistente em qualquer lugar e não confie apenas nas diferenças de caso para diferenciar arquivos. Do ponto de vista da conveniência, é mais fácil usar letras minúsculas e ter uma extensão (.h ou .hpp).
Mais importante que qualquer uma das opções acima, no entanto, é escolher uma convenção para toda a equipe de desenvolvimento e cumpri-la . É muito pior ter que procurar como um arquivo é invocado, nomeado e qual extensão ele usa sempre que você deseja incluir algo - tudo isso deve ser "adivinhado" com o conhecimento do que você está tentando usar.
fonte
Não há regra (no padrão) de que apenas os arquivos de cabeçalho padrão possam estar sem uma extensão; o nome do arquivo pode ser praticamente o que você quiser. As boas práticas gerais, no entanto, sugerem que:
nenhum arquivo jamais terá uma extensão e
tipos diferentes de arquivos têm extensões diferentes - em particular, os cabeçalhos C ++ usam uma extensão (
.hpp
ou.hh
) diferente dos cabeçalhos aceitáveis para um compilador C.(Lamentavelmente, a segunda regra é frequentemente violada e geralmente se vê arquivos de cabeçalho C ++
.h
. Por experiência pessoal, posso garantir que isso causará problemas de manutenção no futuro, mas é uma prática comum.)Com relação ao caso, é necessário extremo cuidado, pois os nomes de arquivos diferenciam maiúsculas de minúsculas em alguns sistemas e não em outros. Eu vi duas regras diferentes que funcionam: tudo em letras minúsculas no nome do arquivo ou o nome do arquivo segue exatamente as mesmas regras referentes a maiúsculas e minúsculas que os símbolos em C ++.
Nos dois casos, você estabelece regras para o projeto, por consenso, e todos as seguem.
fonte
Sim. Sim, pode mesmo. O design da biblioteca é "Nós queremos muito ser Java". É uma bagunça total. A biblioteca padrão é muito melhor.
Além disso, fundamentalmente, é uma falácia lógica. O design do Qt só vale a pena emular se você pode fornecer argumentos lógicos sobre por que é bom, não é bom apenas porque é Qt.
fonte
Como eu sei, desde o padrão de 1998, apenas os cabeçalhos de bibliotecas padrão ficariam sem o .h. Portanto, os arquivos de cabeçalho C ++ não padrão ainda são convencionalmente gravados com .h. Mas lembre-se de que é uma convenção, você não pode usar nenhuma extensão ou mesmo extensão .txt, é como se você escrevesse suas aulas começando com letras minúsculas, ainda está funcionando, mas não é a convenção.
fonte
Estas são convenções, não regras, não há restrições para aderir a convenções, mas convenções tornam a vida mais fácil quando você procura referências.
de acordo com as extensões (.h, .hpp), os arquivos que foram incluídos no c ++ não precisam de extensões, você precisará usá-las se estiver usando cabeçalhos de outros que não c ++, como bibliotecas c ou bibliotecas de reforço.
fonte