Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/03/2016, 04:40
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Problemita con los struc

Cita:
Iniciado por slcna Ver Mensaje
esto no lo sabia.
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
    Código C:
    Ver original
    1. int func()
    2. { return 3; }
    3.  
    4. int main()
    5. {
    6.   printf("%d",func());
    7. }
  • Declarando el elemento antes del primero uso. La implementación puede ir ya en cualquier parte del archivo.
    Código C:
    Ver original
    1. int func();
    2.  
    3. int main()
    4. {
    5.   printf("%d",func());
    6. }
    7.  
    8. int func()
    9. { 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.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.