Cita:
Iniciado por slcna
esto no lo sabia.
![Distraido](http://static.forosdelweb.com/fdwtheme/images/smilies/rolleyes.png)
Tu piensa que el compilador trabaja SIEMPRE hacia adelante. Si en un punto se encuentra algo (una llamada a una función o un tipo de dato) y llegados a ese punto el compilador no sabe nada sobre ese elemento en vez de complicarse la vida te va a arrojar un error y se queda tan tranquilo.
Por otro lado, si tu modificas un archivo cualquiera de código el compilador tendrá que recompilar el código de dicho archivo y, además, todos los archivos de código que hagan referencia al archivo modificado (es como funciona).
Por estos dos motivos fue por el que históricamente existen los archivos de cabecera. En los archivos de cabecera no se suele encontrar código sino únicamente declaraciones de tipos y de funciones. Cuando tu pones un include al principio de un archivo de código estás añadiendo todas las declaraciones de dicho archivo a tu código por lo que el compilador al encontrarse con una función de dicha cabecera sabrá gestionarla correctamente.
Claro está no es obligatorio que todas las funciones y tipos usados en un fichero de código estén en la cabecera. Si una función o un tipo únicamente se va a usar dentro de ese fichero se puede omitir de la cabecera... en este caso para poder hacer uso de dicho elemento tienes que incluirlo de alguna forma antes de su primer uso y esto se puede hacer de dos formas:
- Implementando el elemento antes del primer uso
- Declarando el elemento antes del primero uso. La implementación puede ir ya en cualquier parte del archivo.
Código C:
Ver originalint func();
int main()
{
}
int func()
{ return 3; }
Con las estructuras pasa algo similar, sin embargo en este caso el uso de las declaración en vez de la implementación tiene implicaciones adicionales así que para no liarte por el momento acostúmbrate a dejar las estructuras al principio del archivo y así evitas problemas.
Un saludo.