Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


7.8. El orden importa

En general, una función debe estar declarada antes de usarse. Por ejemplo, este fuente daría un error en muchos compiladores, porque dentro de "main" intentamos usar algo llamado "duplica", que no se ha mencionado antes:

/*---------------------------*/
/*  Ejemplo en C nº 67:      */
/*  C067.C                   */
/*                           */
/*  Función desordenada:     */
/*  puede no compilar        */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/

#include 

int main() {
    float n = 5;
    printf("n vale %f\n", n);
    n = duplica(n);
    printf("Ahora n vale %f\n", n);
   
    return 0;
}

float duplica(float n) {
    return n * 2;
}

La forma de evitarlo es colocar la definición de las funciones antes de usarlas (si se puede) o bien incluir al menos su "prototipo", la cabecera de la función sin incluir los detalles de cómo trabaja internamente, así:

/*---------------------------*/
/*  Ejemplo en C nº 68:      */
/*  C068.C                   */
/*                           */
/*  Prototipo de la función  */
/*  antes de main para que   */
/*  compile sin problemas    */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/

#include 

float duplica(float n) ;

int main() {
    float n = 5;
    printf("n vale %f\n", n);
    n = duplica(n);
    printf("Ahora n vale %f\n", n);
   
    return 0;
}

float duplica(float n) {
    return n * 2;
}

Como curiosidad, si no declaramos la función ni su prototipo antes de "main", más de un compilador dará por sentado que es "int", de modo que este otro fuente sí compilaría correctamente en algunos sistemas:

int main() {
   int n = 5;
   printf("n vale %d\n", n);
   n = duplica(n);
   printf("Ahora n vale %d\n", n);
   return 0;
}

int duplica(int n) {
   return n * 2;
}