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

c++ - stdafx.h: ¿Cuándo lo necesito?



visual-c++ header (6)

Veo tanto código que incluye stdafx.h. Diga, no quiero encabezados precompilados. E incluiré todos los encabezados de sistema necesarios manualmente. En ese caso, ¿hay alguna otra buena razón por la que debería saber dónde necesito stdafx.h ?


Como otros han mencionado: si no necesita encabezados precompilados, realmente no necesita stdafx.h. Y usarlo solo para agrupar los campos comunes es una práctica bastante mala, en realidad.

De hecho, incluso cuando se utilizan encabezados precompilados, es una buena práctica incluir los encabezados que su proceso realmente necesita después de stdafx.h (o precompilado.h o como quiera llamarlo), junto con la magia #ifdef en su encabezado precompilado para desactivarlos el uso de PCH.

¿Por qué? Para verificar las dependencias de su módulo. Ser capaz de deshabilitar su PCH le permite ver si está incluyendo módulos necesarios o no, y luego puede escribir una herramienta para verificar las interdependencias de su módulo al analizar sus archivos .cpp y .h (excluyendo el encabezado PCH, por supuesto).


Incluso sin encabezados precompilados stdafx.h podría ser útil ya que agrupa los encabezados incluidos y las definiciones comunes para todos los archivos.

Por supuesto, puede elegir repetir todas estas definiciones en cada archivo. stdafx.h no es estrictamente necesario.


Puede usar encabezados precompilados (lo cual es bueno) sin usar stdafx.h (lo abomino también). Solo tengo acceso a VC ++ 6.0 pero en eso vaya a Configuración del proyecto | C / C ++ | Encabezados precompilados y seleccione "uso automático del encabezado precompilado", pero deje el cuadro "compilado a través" vacío.


Sé que este es un hilo viejo, pero pensé que pasaría mi opinión a los lectores. Encontré esto en 2017, así que estoy seguro de que no soy el único que estará aquí.

Existe una ventaja al usar encabezados pre compilados, que otros pueden pasar por alto porque han estado usando su práctica por muchos años. El estándar de C ++ ha evolucionado mucho. En lugar de incluir vector en 20 archivos que pueda necesitar y / o lo que sea, utiliza un archivo PCH y el compilador tiene que trabajar menos, y eso hace que todos se muestren felices. También puede colocar sus macros comunes allí, como VERIFICAR, y ASSERT y objetos de clase inteligente. No coloque sus encabezados de clase allí, no tendría sentido para eso, más bien la biblioteca estándar o algo que necesitará usar globalmente en muchos lugares, como las macros que mencioné.

Básicamente se da cuenta de esto, al incluir los encabezados que necesita en cada archivo que necesita, como iostream, cadena y vector, está compilando efectivamente cada vez como una línea en el archivo. Incluye un encabezado "Pre compilado", así que solo el nombre debe sonar allí.


Si no desea usar encabezados precompilados, no tiene sentido usar un archivo de inclusión estándar; esto ralentizará la compilación para cada archivo que lo incluya y hará que incluyan elementos adicionales que no necesitan. Deshágase de él y solo incluya los encabezados que necesitan.


stdafx.h es solo otro archivo de encabezado. Si se cayó, no necesita que lo sienta libre de incluirlo y eliminarlo del proyecto.

Sin embargo, es bastante típico tener un archivo como stdafx.h exactamente para que funcionen los encabezados precompilados y no incluir todo el material manualmente en cada archivo fuente.