Todos os compiladores C ++ têm um sério problema de desempenho para lidar. Compilar código C ++ é um processo longo e lento.
A compilação de cabeçalhos incluídos na parte superior dos arquivos C ++ é um processo muito longo e lento. Compilar as enormes estruturas de cabeçalho que fazem parte da API do Windows e outras grandes bibliotecas de API é um processo muito , muito longo e lento. Ter que repetir várias vezes para cada arquivo de origem Cpp é uma sentença de morte.
Isso não é exclusivo do Windows, mas um problema antigo enfrentado por todos os compiladores que precisam compilar com uma API grande como o Windows.
O compilador da Microsoft pode melhorar esse problema com um truque simples chamado cabeçalhos pré-compilados . O truque é bem simples: embora cada arquivo CPP possa dar um significado ligeiramente diferente à legalmente da cadeia de arquivos de cabeçalho incluídos na parte superior de cada arquivo Cpp (por coisas como ter macros diferentes # definidas antes das inclusões, ou incluindo os cabeçalhos em ordem diferente), que geralmente não é o caso. Na maioria das vezes, temos dezenas ou centenas de arquivos incluídos, mas todos eles têm o mesmo significado para todos os arquivos Cpp que estão sendo compilados em seu aplicativo.
O compilador pode economizar muito tempo se não precisar compilar todos os arquivos Cpp, além de dezenas de inclusões, literalmente, do zero.
O truque consiste em designar um arquivo de cabeçalho especial como ponto de partida de todas as cadeias de compilação, o chamado arquivo de 'cabeçalho pré-compilado', que geralmente é um arquivo chamado stdafx.h simplesmente por razões históricas.
Basta listar todos os seus grandes cabeçalhos enormes para suas APIs no seu arquivo stdafx.h, na ordem apropriada e, em seguida, iniciar cada um dos seus arquivos CPP no topo com um #include "stdafx.h"
, antes de qualquer conteúdo significativo (a única coisa permitida antes é comentários).
Nessas condições, em vez de começar do zero , o compilador começa a compilar a partir dos resultados já salvos da compilação de tudo stdafx.h
.
Não acredito que esse truque seja exclusivo dos compiladores da Microsoft, nem acho que foi um desenvolvimento original.
Para compiladores Microsoft, a configuração que controla o uso de cabeçalhos pré-compilados é controlado por um argumento de linha de comando para o compilador: /Yu "stdafx.h"
. Como você pode imaginar, o uso do stdafx.h
nome do arquivo é simplesmente uma convenção; você pode mudar o nome, se desejar.
No Visual Studio 2010, essa configuração é controlada na GUI, clicando com o botão direito do mouse em um projeto CPP, selecionando 'Properties' e navegando para "Configuration Properties \ C / C ++ \ Precompiled Headers". Para outras versões do Visual Studio, o local na GUI será diferente.
Observe que, se você desabilitar os cabeçalhos pré-compilados (ou executar o seu projeto através de uma ferramenta que não os suporte), isso não tornará o seu programa ilegal; significa simplesmente que sua ferramenta irá compilar tudo do zero todas as vezes.
Se você estiver criando uma biblioteca sem dependências do Windows, poderá comentar ou remover facilmente #include
s do stdafx.h
arquivo. Não é necessário remover o arquivo em si, mas é claro que você também pode fazê-lo, desativando a configuração do cabeçalho de pré-compilação acima.