visual-studio visual-studio-2010 visual-c++ cross-platform stdafx.h

¿Para qué se utiliza “stdafx.h” en Visual Studio?



visual-studio visual-studio-2010 (3)

Un archivo llamado stdafx.h se genera automáticamente cuando inicio un proyecto en Visual Studio 2010. Necesito crear una biblioteca de C ++ multiplataforma, por lo que no puedo / no puedo usar este archivo de encabezado.

¿ stdafx.h qué se utiliza stdafx.h ? ¿Está bien que acabo de eliminar este archivo de encabezado?


Es un "archivo de encabezado precompilado": cualquier encabezado que incluya en stdafx.h se procesa previamente para ahorrar tiempo durante las compilaciones posteriores. Puede leer más sobre esto aquí en MSDN .

Si está creando una aplicación multiplataforma, marque "Proyecto vacío" cuando cree su proyecto y Visual Studio no pondrá ningún archivo en su proyecto.


Simplemente me encontré con esto, ya que estoy intentando crearme un marco básico, pero comencé creando una nueva opción de Programa Win32 en Visual Studio 2017. "stdafx.h" es innecesario y debe eliminarse. Luego puede eliminar el estúpido "stdafx.h" y "stdafx.cpp" que se encuentran en su Explorador de soluciones, así como los archivos de su proyecto. En su lugar, tendrás que poner

#include <Windows.h>

en lugar.


Todos los compiladores de C ++ tienen un grave problema de rendimiento con el que lidiar. Compilar código C ++ es un proceso largo y lento.

La compilación de encabezados incluidos en la parte superior de los archivos C ++ es un proceso muy largo y lento. La compilación de las enormes estructuras de encabezado que forman parte de la API de Windows y otras bibliotecas de API grandes es un proceso muy , muy largo y lento. Tener que hacerlo una y otra vez, y una y otra vez para cada archivo fuente de Cpp es una sentencia de muerte.

Esto no es exclusivo de Windows, pero es un problema antiguo al que se enfrentan todos los compiladores que deben compilarse contra una gran API como Windows.

El compilador de Microsoft puede mejorar este problema con un simple truco llamado encabezados precompilados . El truco es bastante hábil: aunque cada archivo CPP puede potencialmente y legalmente dar un significado ligeramente diferente a la cadena de archivos de encabezado incluida encima de cada archivo Cpp (por cosas como tener diferentes macros # definidas antes de las inclusiones, o al incluir los encabezados en orden diferente), este no suele ser el caso. La mayoría de las veces, tenemos docenas o cientos de archivos incluidos, pero todos están destinados a tener el mismo significado para todos los archivos Cpp que se compilan en su aplicación.

El compilador puede hacer grandes ahorros de tiempo si no tiene que empezar a compilar cada archivo Cpp más sus docenas de incluye literalmente desde cero cada vez.

El truco consiste en designar un archivo de encabezado especial como el punto de inicio de todas las cadenas de compilación, el denominado archivo de ''encabezado precompilado'', que comúnmente es un archivo llamado stdafx.h simplemente por razones históricas.

Simplemente enumere todos sus encabezados enormes para sus API en su archivo stdafx.h, en el orden apropiado, y luego comience cada uno de sus archivos CPP en la parte superior con un #include "stdafx.h" , antes de cualquier contenido significativo (solo sobre lo único permitido antes es comentarios).

Bajo esas condiciones, en lugar de empezar de cero , el compilador comienza a compilar a partir de los resultados ya guardados de compilar todo en stdafx.h .

No creo que este truco sea exclusivo de los compiladores de Microsoft, ni creo que fuera un desarrollo original.

Para los compiladores de Microsoft, la configuración que controla el uso de encabezados precompilados se controla mediante un argumento de línea de comando al compilador: /Yu "stdafx.h" . Como puede imaginar, el uso del nombre de archivo stdafx.h es simplemente una convención; Puedes cambiar el nombre si lo deseas.

En Visual Studio 2010, esta configuración se controla desde la GUI haciendo clic con el botón derecho en un proyecto de CPP, seleccionando ''Propiedades'' y navegando a "Propiedades de configuración / C / C ++ / Encabezados precompilados". Para otras versiones de Visual Studio, la ubicación en la GUI será diferente.

Tenga en cuenta que si deshabilita los encabezados precompilados (o ejecuta su proyecto a través de una herramienta que no los admite), no hace que su programa sea ilegal; simplemente significa que su herramienta compilará todo desde cero cada vez.

Si está creando una biblioteca sin dependencias de Windows, puede comentar o eliminar fácilmente #includes del archivo stdafx.h. No hay necesidad de eliminar el archivo per se, pero claramente puede hacerlo también, deshabilitando la configuración del encabezado de precompilación arriba.