Veo tanto código que incluye stdafx.h. Diga, lo hago no quiero encabezados precompilados. E I será incluir todos los encabezados del sistema necesarios a mí mismo de forma manual. En ese caso, ¿hay alguna otra buena razón por la que deba saber dónde necesito stdafx.h
?stdafx.h: ¿Cuándo lo necesito?
Respuesta
Si no desea utilizar encabezados precompilados, no tiene sentido utilizar 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 necesitar. Deshágase de él y solo incluya los encabezados que necesitan.
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 optar por repetir todas estas definiciones en cada archivo. stdafx.h no es estrictamente necesario.
Mala práctica: siempre debe enumerar explícitamente los encabezados que necesita para que pueda verificar las dependencias de los módulos. – snemarch
stdafx generalmente incluye definiciones específicas de plataforma comunes para todos los archivos. Es una "dependencia" de cada archivo. Lo usas para no repetir las definiciones en cada archivo. Esta es una buena práctica, porque solo haces eso en un solo lugar. – kgiannakakis
No es una dependencia de cada archivo a menos que cada archivo realmente requiera cada encabezado en stdafx. En la práctica, esto rara vez es el caso (IME). Usarlo de esta manera es perezoso en el mejor de los casos, mala práctica en el peor. – Patrick
stdafx.h es simplemente 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.
Como han mencionado otros: 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 usa 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 precompilado encabezado para desactivar 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).
Sí, escribir un analizador de C++ es una gran ganancia de tiempo ......... – Virus721
Puede usar encabezados pre compilados (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 tema viejo, pero pensé que iba a pasar mi opinión a los lectores. Encontré esto en 2017, así que estoy seguro de que no soy el único que estará aquí.
Existe la ventaja de utilizar encabezados precompilados, que otros pueden pasar por alto porque han estado utilizando su práctica durante 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í.
- 1. MSBuild: ¿Qué es y cuándo lo necesito?
- 2. ¿Qué es un bus de servicio y cuándo lo necesito?
- 3. PayPal: pixel.gif - ¿Lo necesito?
- 4. Cómo usar stdafx.h correctamente?
- 5. ¿Cuándo no necesito un typedef?
- 6. ¿Por qué/cuándo necesito un objetivo "limpio"?
- 7. ¿Por qué y cuándo necesito Azure?
- 8. ¿Cómo averiguo lo que necesito saber?
- 9. ¿De qué sirve "stdafx.h" en Visual Studio?
- 10. ¿Cuándo necesito una clase anónima en C++?
- 11. ¿Cuándo dudé 'Obtener lo último' de TFS?
- 12. ¿Cómo incluir stdafx.h desde el directorio raíz?
- 13. Manejo de stdafx.h en código multiplataforma
- 14. ¿Por qué no puedo #ifdef stdafx.h?
- 15. Calendario add() vs roll() ¿cuándo lo usamos?
- 16. https vs ssl- cuándo usar lo que
- 17. IEnumerable, IEnumerator vs foreach, cuándo usar lo
- 18. ¿Qué es SAPI y cuándo lo usarías?
- 19. ¿Qué pasa con el "Afx" en StdAfx.h?
- 20. ¿Cuándo y dónde necesito archivos en una aplicación de rieles?
- 21. ¿Por qué (y cuándo) necesito usar paréntesis después de sizeof?
- 22. ¿Cuándo necesito usar un Bigarray y por qué?
- 23. ¿Es todo lo que necesito la "url de identidad"? - OpenID
- 24. ¿Puedo usar thread.stop() en Java si realmente lo necesito?
- 25. Temporizador de refuerzo: ¿cómo obtener tiempo cuando lo necesito?
- 26. ¿Necesito node.js en Python como lo haría con PHP?
- 27. Cuándo usar HTML5 en android? cuando no lo usas?
- 28. Dado cuando a continuación, las pruebas: ¿NECESITO un "cuándo"?
- 29. ¿Qué es "almacenamiento local de subprocesos" en Python, y por qué lo necesito?
- 30. ¿Qué es SELF JOIN y cuándo lo usarías?
(para cualquiera que use esto como referencia) Si ya está usando encabezados precompilados, vaya a las propiedades de su proyecto, C/C++ y encabezados precompilados, y elija la opción de no usarlos. – MirroredFate
StdAfx.h para principiantes: http://www.cplusplus.com/articles/2z86b7Xj/ –