AnteriorPosterior

7.8. El orden importa

  Curso: Fundamentos de programación en C, por Nacho Cabanes

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 <stdio.h>
 
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 <stdio.h>
 
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;
}
 

Actualizado el: 25-07-2014 17:12

AnteriorPosterior