Um arquivo chamado stdafx.h
é gerado automaticamente quando inicio um projeto no Visual Studio 2010. Preciso criar uma biblioteca C ++ de plataforma cruzada, para que eu não possa / não possa usar esse arquivo de cabeçalho.
Para que é stdafx.h
utilizado? Posso remover este arquivo de cabeçalho?
Respostas:
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 dostdafx.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 dostdafx.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.fonte
#include "stdafx.h"
? Claro, mas isso é apenas um #include padrão. A parte "extensão do MS" é apenas uma otimização de desempenho do compilador; isso não altera a semântica de ter um arquivo de cabeçalho que é chamado de "stdafx.h". Observe que se você remover a inclusão e seu código depender de qualquer coisa que foi incluída no stdafx.h, será necessário incluí-la diretamente.#include
os encontra no arquivo de origem (feito pela mesma etapa do 'pré-processador' que avalia as macros). O arquivo total resultante é então passado para o compilador real, que nunca vê um arquivo de cabeçalho como uma entidade separada. Você só coloca declarações no arquivo de cabeçalho porque é isso que funciona bem em um arquivo de cabeçalho - é uma regra convencional. Tente! Crie um arquivo de cabeçalho com um programa inteiro e crie um arquivo de origem que tenha apenas #include. Compila bem.É um "arquivo de cabeçalho pré-compilado" - todos os cabeçalhos 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.
fonte
"Stdafx.h" é um cabeçalho pré-compilado. Inclui arquivos para arquivos padrão do sistema e arquivos específicos do projeto usados com freqüência, mas que são alterados com pouca frequência. O que reduz o tempo de compilação e o processamento desnecessário.
O cabeçalho pré-compilado stdafx.h é basicamente usado no Microsoft Visual Studio para permitir que o compilador conheça os arquivos que foram compilados uma vez e não precise compilá-lo do zero. Você pode ler mais sobre isso
http://www.cplusplus.com/articles/1TUq5Di1/
https://docs.microsoft.com/pt-BR/cpp/ide/precompiled-header-files?view=vs-2017
fonte
Acabei de me deparar com isso, já que estou tentando criar uma estrutura básica, mas comecei criando uma nova opção de programa Win32 no Visual Studio 2017. "stdafx.h" é desnecessário e deve ser removido. Em seguida, você pode remover os "stdafx.h" e "stdafx.cpp" estúpidos que estão no Gerenciador de Soluções, bem como os arquivos do seu projeto. Em seu lugar, você precisará colocar
em vez de.
fonte