Eu li de um Blog de Forças de Código que se #include #include
em um programa C++
, então não há necessidade de include nenhum outro arquivo de header. como o #include
funciona e é #include
usá-lo em vez de include arquivos de header individuais?
É basicamente um arquivo de header que também inclui todas as bibliotecas padrão e arquivo de inclusão stl. O único propósito que posso ver para isso seria para testes e educação.
Se, por exemplo, GCC 4.8.0 /bits/stdc++.h source .
Usá-lo includeia muitas coisas desnecessárias e aumentaria o tempo de compilation.
Edit: Como Neil diz, é uma implementação de headers pré-compilados. Se você configurá-lo para pré-compilation corretamente, ele pode, de fato, acelerar o tempo de compilation, dependendo do seu projeto. ( https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html )
No entanto, sugiro que você reserve algum tempo para aprender sobre cada um dos headers sl / stl e inclua-os separadamente, e não use “superheaders”, exceto para fins de pré-compilation.
#include
é um arquivo de implementação para um header pré-compilado.
Do ponto de vista da engenharia de software, é uma boa ideia minimizar a inclusão. Se você usá-lo, na verdade, inclui muitos arquivos, que seu programa pode não precisar, aumentando assim o tempo de compilation e o tamanho do programa desnecessariamente. [edit: como apontado pelo @Swordfish nos comentários que o tamanho do programa de saída permanece inalterado. Mas ainda assim, é uma boa prática include apenas as bibliotecas que você realmente precisa, a menos que seja uma competição competitiva.]
Mas nos concursos, usar esse arquivo é uma boa ideia, quando você quer reduzir o tempo gasto em tarefas domésticas; especialmente quando sua sorting é sensível ao tempo.
Funciona na maioria dos juízes online, em ambientes de concursos de programação, incluindo o ACM-ICPC (Sub-Regionais, Regionais e Finais Mundiais) e muitos juízes online.
As desvantagens disso são que
Esse arquivo de header não faz parte do padrão C ++, portanto, não é portátil e deve ser evitado.
Além disso, mesmo se houvesse algum header no padrão, você iria querer evitá-lo em vez de headers específicos, já que o compilador tem que realmente ler e analisar cada header incluído (incluindo headers incluídos recursivamente) toda vez que unidade de tradução é compilada.
Infelizmente essa abordagem não é portátil C ++ (até agora).
Todos os nomes padrão estão no namespace std
e, além disso, você não pode saber quais nomes NÃO são definidos por inclusão e header (em outras palavras, é perfeitamente legal que uma implementação declare o nome std::string
direta ou indiretamente ao usar #include
) .
Apesar disso, você é obrigado pela linguagem a saber e dizer ao compilador qual header padrão inclui qual parte da biblioteca padrão. Esta é uma fonte de bugs de portabilidade, porque se você esquecer por exemplo #include
mas usar std::map
é possível que o programa compile de qualquer maneira silenciosamente e sem avisos em uma versão específica de um compilador específico, e você pode obter apenas erros mais tarde, quando portando para outro compilador ou versão.
Na minha opinião, não há desculpas técnicas válidas porque isso é necessário para o usuário geral: o binário do compilador pode ter todo o namespace padrão embutido e isso pode aumentar o desempenho ainda mais do que headers pré-compilados (por exemplo, usando hashing perfeito para pesquisas, removendo padrões headers de análise ou carregamento / demarshalling e assim por diante).
O uso de headers padrão simplifica a vida de quem constrói compiladores ou bibliotecas padrão e isso é tudo. Não é algo para ajudar os usuários.
No entanto, esta é a maneira como a linguagem é definida e você precisa saber qual header define quais nomes planejam para que alguns neurônios extras sejam queimados em configurações sem sentido para lembrar (ou tente localizar e IDE que adiciona automaticamente os headers padrão que você usa e remove os que você não faz … uma alternativa razoável).
É basicamente um arquivo de header que inclui todas as bibliotecas padrão.
Em concursos de programação , usar esse arquivo é uma boa ideia, quando você deseja reduzir o tempo perdido em tarefas domésticas; especialmente quando sua sorting é sensível ao tempo.
Em concursos de programação , as pessoas se concentram mais em encontrar algoritmos para resolver um problema do que em engenharia de software.
Mas na perspectiva da engenharia de software , não é uma boa ideia usar. Se você usá-lo, na verdade, inclui muitos arquivos, que seu programa pode não precisar, aumenta o tempo de compilation e o tamanho do programa desnecessariamente.