¿Qué sucede cuando se llama a una función antes de su declaración en C?

En C, si se llama a una función antes de su declaración, el compilador asume el tipo de retorno de la función como int .
Por ejemplo, el siguiente programa falla en la compilación.

C

#include <stdio.h>
int main(void)
{
    // Note that fun() is not declared
    printf("%c\n", fun());
    return 0;
}
 
char fun()
{
   return 'G';
}

si la función char fun() en el código anterior se define más adelante en main() y la declaración de llamada, entonces no se compilará correctamente. Porque el compilador asume el tipo de retorno como «int» por defecto. Y en la declaración, si el tipo de retorno no coincide con int, el compilador dará un error.

El siguiente programa se compila y funciona bien porque la función se define antes que main().

C

#include <stdio.h>
 
int fun()
{
   return 10;
}
 
int main(void)
{
    // Note the function fun() is declared
    printf("%d\n", fun());
    return 0;
}

¿Qué pasa con los parámetros? el compilador no asume nada acerca de los parámetros. Por lo tanto, el compilador no podrá realizar una verificación en tiempo de compilación de los tipos de argumentos y la aridad cuando la función se aplique a algunos argumentos. Esto puede causar problemas. Por ejemplo, el siguiente programa se compiló bien en GCC y produjo un valor de basura como salida. 

C

#include <stdio.h>
 
int main (void)
{
    printf("%d", sum(10, 5));
    return 0;
}
int sum (int b, int c, int a)
{
    return (a+b+c);
}

Existe la idea errónea de que el compilador asume parámetros de entrada también int. Si el compilador hubiera asumido los parámetros de entrada int, el programa anterior habría fallado en la compilación.
Siempre se recomienda declarar una función antes de su uso para que no veamos sorpresas cuando se ejecuta el programa (Ver esto para más detalles).
Fuente: 
http://en.wikipedia.org/wiki/Function_prototype#Uses
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *