CUESTIÓN

¿Qué es el fichero "StdAfx.h"? ¿Por qué no me reconoce el compilador las llamadas de Win32 u otras de libC, a pesar de poner el fichero de cabeceras correspondiente?


SOLUCIÓN

Cada ver que recompiláis un programa en C, el compilador tiene que procesar primero los ficheros de cabeceras .h que habéis incluido con la directiva #include. La mayor parte de este trabajo es inútil o ya estaba hecho en la anterior compilación. Con el objeto de optimizar la compilación, Visual Studio ofrece la posibilidad de generar cabeceras precompiladas. Dentro de este mecanismo aparece el fichero StdAfx.h que se crea al abrir un proyecto nuevo.

El asunto es que, para el tipo de programas que nosotros hacemos, la ventaja no es grande y, además, este fichero interfiere con el resto de ficheros de cabeceras, por lo que os recomiendo que:
  1. Borréis el fichero StdAfx.h y su #include correspondiente.
  2. En las opciones del Proyecto, (Menú Proyecto, Propiedades de...), visitad C/C++, "Encabezados precompilados" y en el menú desplegable "Crear o utilizar encabezados precompilados", marcad "No utilizar encabezados precompilados"
  3. El orden adecuado para no tener conflictos entre los ficheros de cabeceras es:
    1. Primero los fichero de libc (stdio.h, stdlib.h, etc.), entre < y >.
    2. Luego el fichero windows.h para que os reconozca las llamadas de WIN32, entre < y >.
    3. Finalmente, los ficheros de cabeceras propios de vuestro programa, entre comillas.

© 2006 Guillermo González Talaván.