c++ visual-studio precompiled-headers stdafx.h

c++ - ¿Por qué stdafx.h funciona de la manera que lo hace?



visual-studio precompiled-headers (4)

Como de costumbre, cuando mi cerebro está jugando con algo que no puedo entender, les pido ayuda :)

Esta vez me he estado preguntando por qué stdafx.h funciona de la manera en que lo hace. A mi entender, hace 2 cosas:

  • Incluye encabezados estándar que podríamos (?) Usar y que rara vez se cambian
  • Funciona como un marcador de compilación para cuando el código ya no se precompila.

Ahora, estas dos cosas me parecen dos tareas muy diferentes, y me pregunto por qué no hicieron dos pasos separados para cuidarlas. Para mí, parece razonable tener un # pragma-command para marcar los elementos y, opcionalmente, tener un archivo de encabezado con las líneas de windows.h para hacer lo mismo con los encabezados que se usan a menudo ... Lo que me lleva a mi próximo punto: ¿Por qué estamos obligados a incluir encabezados de uso frecuente a través de stdafx.h? Personalmente, no estoy al tanto de los encabezados usados ​​a menudo que utilizo para los que ya no estoy haciendo los propios, pero ¿quizás estos encabezados sean necesarios para la generación .dll?

Thx por adelantado


Ayudará a reducir compilaciones largas.


Mantiene el tiempo de compilación bajo, ya que las cosas en él siempre se compilan primero (ver detalles en la cita a continuación):

stdafx.h es un archivo que describe tanto el sistema estándar como los archivos de inclusión específicos del proyecto que se usan con frecuencia pero casi nunca se modifican.

Los compiladores compatibles precompilarán este archivo para reducir los tiempos generales de compilación. Visual C ++ no compilará nada antes del #include "stdafx.h" en el archivo fuente , a menos que la opción de compilación /Yu''stdafx.h ''esté desmarcada (por defecto); asume que todo el código en la fuente hasta e incluyendo esa línea ya está compilado.


No está obligado a usar "stdafx.h". Puede marcar Usar encabezados precompilados en las propiedades del proyecto (o al crear el proyecto) y ya no necesitará stdafx.h .

El compilador lo usa como una pista para poder precompilar la mayoría de los encabezados usados ​​por separado en un archivo .pch para reducir el tiempo de compilación (no tiene que compilarlo cada vez).


stdafx.h es UNA forma de hacer que Visual studio haga encabezados precompilados. Es un enfoque simple de usar, fácil de generar automáticamente, que funciona bien para aplicaciones más pequeñas, pero puede causar problemas para aplicaciones más grandes y complejas, donde el hecho de que fomenta, de manera efectiva, el uso de un solo archivo de encabezado puede provocar el acoplamiento entre componentes que son por lo demás independientes. Si se usa solo para encabezados de sistema, tiende a estar bien, pero a medida que un proyecto crece en tamaño y complejidad, es tentador tirar otros encabezados y luego cambiar repentinamente los resultados de cualquier archivo de encabezado en la recompilación de todo en el proyecto.

Vea aquí: ¿Hay alguna manera de usar encabezados precompilados en VC ++ sin requerir stdafx.h? para detalles de un enfoque alternativo.