O que é “stdafx.h” usado no Visual Studio?

Um arquivo chamado stdafx.h é gerado automaticamente quando inicio um projeto no Visual Studio 2010. Eu preciso criar uma biblioteca C ++ de plataforma cruzada, portanto, não posso / não posso usar esse arquivo de header.

O que é usado para stdafx.h ? Tudo bem que eu acabei de remover esse arquivo de header?

Todos os compiladores C ++ têm um sério problema de desempenho para lidar. Compilar o código C ++ é um processo longo e lento.

Compilar headers incluídos no topo de arquivos C ++ é um processo muito longo e lento. A compilation de estruturas de header enormes que fazem parte da API do Windows e de outras bibliotecas de API grandes é um processo muito , muito longo e lento. Ter que fazer isso de um lado para o outro para cada arquivo de origem único do Cpp é uma sentença de morte.

Isso não é exclusivo do Windows, mas um antigo problema enfrentado por todos os compiladores que precisam compilar em uma API grande como o Windows.

O compilador da Microsoft pode amenizar esse problema com um truque simples chamado headers pré-compilados . O truque é bem esperto: embora cada arquivo CPP possa potencialmente e legalmente dar um significado diferente à cadeia de arquivos de header incluídos no topo de cada arquivo Cpp (por coisas como ter macros diferentes # definir antes dos includes, ou incluindo os headers em ordem diferente), o que na maioria das vezes 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 começar a compilar cada arquivo Cpp mais suas dúzias de inclusões literalmente do zero todas as vezes.

O truque consiste em designar um arquivo de header especial como ponto de partida de todas as cadeias de compilation, o chamado arquivo de ‘header pré-compilado’, que geralmente é um arquivo chamado stdafx.h simplesmente por razões históricas.

Simplesmente liste todos os seus grandes headers para suas APIs em seu arquivo stdafx.h, na ordem apropriada, e então inicie cada um dos seus arquivos CPP no topo com um #include "stdafx.h" , antes de qualquer conteúdo significativo (apenas sobre a única coisa permitida antes é os comentários).

Sob essas condições, em vez de começar do zero , o compilador começa a compilar os resultados já salvos da compilation de tudo em stdafx.h .

Não acredito que esse truque seja exclusivo dos compiladores da Microsoft, nem acho que tenha sido um desenvolvimento original.

Para Microsoft compiladores, a configuração que controla o uso de headers pré-compilados é controlada por um argumento de linha de comando para o compilador: /Yu "stdafx.h" . Como você pode imaginar, o uso do nome do arquivo stdafx.h é simplesmente uma convenção; você pode mudar o nome se assim desejar.

No Visual Studio 2010, essa configuração é controlada a partir da GUI, clicando com o botão direito do mouse em um projeto CPP, selecionando “Propriedades” e navegando até “Propriedades de configuração \ C / C ++ \ Cabeçalhos pré-compilados”. Para outras versões do Visual Studio, o local na GUI será diferente.

Observe que, se você desabilitar os headers pré-compilados (ou executar seu projeto por meio de uma ferramenta que não os suporta), 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 dependencies do Windows, poderá comentar ou remover facilmente #includes do arquivo stdafx.h. Não há necessidade de remover o arquivo em si, mas é claro que você também pode fazê-lo, desabilitando a configuração do header de pré-compilation acima.

É um “arquivo de header pré-compilado” – quaisquer headers incluídos no stdafx.h são pré-processados ​​para economizar tempo durante as compilações subsequentes. Você pode ler mais sobre isso aqui no MSDN .

Se você estiver criando um aplicativo de plataforma cruzada, marque “Projeto vazio” ao criar seu projeto e o Visual Studio não colocará nenhum arquivo no seu projeto.

Eu acabei de me deparar com isso desde que eu estou tentando criar uma estrutura básica, mas comecei criando uma nova opção do Programa Win32 no Visual Studio 2017. “stdafx.h” é desnecessário e deve ser removido. Em seguida, você pode remover o estúpido “stdafx.h” e “stdafx.cpp” que está no seu Gerenciador de Soluções, bem como os arquivos do seu projeto. Em seu lugar, você precisará colocar

 #include  

em vez de.