Las funciones son porciones de código que devuelven un valor.
Permiten descomponer el programa en módulos que se llaman entre ellos.
En C no existe diferencia entre funciones y procedimientos: a todas las subrutinas se las llama funciones.
La definición de una función especifica lo siguiente:
- nombre de la función
- número de argumentos que lleva y tipo de cada uno de ellos
- tipo de datos que devuelve
- Cuerpo de la función (el código que ejecuta)
Sintaxis:
tipo nombre ( arg1, arg2, ... )
{
... cuerpo ...
}
Cada argumento se especifica como en una declaración de variable.
El cuerpo de la función debería contener una sentencia donde se devuelve el resultado de la función, que se hace de esta forma:
return expresión;
La función devolverá el resultado de la expresión.
5.1 Ejemplo de función
Función que devuelve la suma de dos enteros.
int suma ( int a, int b )
{
return a+b;
}
5.2 Llamadas a función
Para llamar a una función, se escribe su nombre y entre paréntesis los valores que se deseen dar a los argumentos:
función ( expr1, expr2, ... )
Cada expresión se evalúa y su resultado se pasa como argumento a la función. Las expresiones han de tener el mismo tipo del argumento correspondiente, o al menos un tipo compatible.
x = suma ( 1, a+5 ); /* correcto */
y = suma ( “hola”, 5 ); /* arg. 1 incorrecto */
Una llamada a función es una expresión, con todo lo que ello implica.
No es necesario recoger en una variable el valor devuelto por la función.
(Por ejemplo, printf y scanf son funciones que devuelven un entero).
5.3 Funciones sin argumentos
Se declaran con void entre paréntesis (sólo en C).
int fecha (void)
{ ... }
Se las llama así:
dato = fecha();
es decir, siempre hay que escribir los paréntesis aunque no haya argumentos.
En C++ se declaran sólo con los paréntesis, sin el void.
5.5 Argumentos de entrada/salida o paso por referencia
Una función en C no puede alterar las variables pasadas como parámetros. Los parámetros se pasan por valor .
#include <stdio.h>
/* función inútil */
void incrementa ( int variable )
{
variable ++;
}
main()
{
int x = 33;
incrementa (x);
/* x no resulta afectada, sigue valiendo 33 */
printf ( "la variable x vale ahora %d\n", x );
}
Para conseguir alterar una variable pasada como parámetro, hay que recurrir a los punteros. (Se verá más adelante).
5.6 Otras consideraciones
Funciones anidadas
En C no se pueden declarar funciones dentro de otras (funciones anidadas o locales). Todas las funciones son globales.
Recursividad
Se permite hacer llamadas recursivas:
float factorial (int n)
{
if (n<=1) return 1.0;
else return n*factorial(n-1);
}
0 comentarios:
Publicar un comentario