Curso de CEl Rincón del C - www.elrincondelc.com

Introducción a las Funciones

[Anterior] [Siguiente] [Contenido]

Contenido del Capítulo:

Introducción

Vamos a dar un paso más en la complejidad de nuestros programas. Vamos a empezar a usar funciones creadas por nosotros. Las funciones son de una gran utilidad en los programas. Nos ayudan a que sean más legibles y más cortos. Con ellos estructuramos mejor los programas.

Una función sirve para realizar tareas concretas y simplificar el programa. Nos sirve para evitar tener que escribir el mismo código varias veces. Ya hemos visto en el curso algunas funciones como printf, gotoxy, scanf y clrscr. Algunas de éstas están definidas en una biblioteca (la biblioteca estándar de C). No tenemos que preocuparnos de ella porque el compilador se encarga de ella automáticamente.

Sin embargo nosotros también podemos definir nuestras propias funciones. Pocas veces se ve un programa un poco complejo que no use funciones. Una de ellas, que usamos siempre, es la función main.

[Arriba]

Definición de una función

Una función tiene el siguiente formato:

tipo_de_variable nombre_de_la_función( argumentos )
     {
     definición de variables;

     cuerpo de la función;

     return 0;
     }

Poco a poco, empecemos por el nombre_de_la_función. Para el nombre no se pueden usar mas que letras, números y el símbolo '_'. No se pueden usar ni acentos ni espacios. Además el nombre de la función debe empezar por una letra, no puede empezar con un número. El nombre de la función se usa para llamarla dentro del programa.

El tipo_de_variable: Cuando una función se ejecuta y termina debe devolver un valor. Este valor puede ser cualquiera de los tipos de variables que hemos visto en el capítulo de Tipos de datos (int, char, float, double) o un tipo de dato definido por nosotros (esto lo veremos más tarde). El valor que devuelve la función suele ser el resultado de las operaciones que se realizan en la función, o si han tenido éxito o no.

También podemos usar el tipo void. Este nos permite que podamos devolver cualquier tipo de variable o ninguna.

Definición de variables: Dentro de la función podemos definir variables que sólo tendrán validez dentro de la propia función. Si declaramos una variable en una función no podemos usarla en otra.

Cuerpo de la función: Aquí es donde va el código de la función.

Return: Antes hemos indicado que la función devuelve un valor. La sentencia return se usa para esto. El dato que se pone despues de return es el dato que se devuelve. Puede ser una constante o una variable. Debe ser del mismo tipo que tipo_de_variable.

Argumentos: Estos son variables que se pasan como datos a una función. Deben ir separados por una coma. Cada variable debe ir con su tipo de variable.

Las funciones deben definirse antes de ser llamadas. En los ejemplos a continuación se llama a la función desde main, así que tenemos que definirlas antes que main. Esto lo veremos en el apartado siguiente.

Ejemplo 1. Función sin argumentos que no devuelve nada:

Este programa llama a la función prepara pantalla que borra la pantalla y muestra el mensaje "la pantalla está limpia". Por supuesto es de nula utilidad pero nos sirve para empezar.

#include <stdio.h>
#include <conio.h>

void prepara_pantalla()     /* No se debe poner punto y coma aquí */
     {
     clrscr();
     printf( "La pantalla está limpia\n" );
     return;     /* No hace falta devolver ningún valor, mucha gente ni siquiera pone este return */
     }

int main()
     {
     prepara_pantalla();/* Llamamos a la función */
     }

Ejemplo 2. Función con argumentos, no devuelve ningún valor:

En este ejemplo la función compara toma dos números, los compara y nos dice cual es mayor.

#include <stdio.h>
#include <conio.h>

void compara( int a, int b )     /* Metemos los parámetros a y b a la función */
     {
     if ( a>b ) printf( "%i es mayor que %i\n" , a, b );
     else printf( "%i es mayor que %i\n", b, a );
     }

int main()
     {
     int num1, num2;

     printf( "Introduzca dos números: " );
     scanf( "%i %i", &num1, &num2 );
     
     compara( num1, num2 );/* Llamamos a la función con sus dos argumentos */
	 
     return 0;
     }

Ejemplo 3. Función con argumentos que devuelve un valor.

Este ejemplo es como el anterior pero devuelve como resultado el mayor de los dos números.

#include <stdio.h>
#include <conio.h>

int compara( int a, int b )     /* Metemos los parámetros a y b a la función */
     {
     int mayor;     /* Esta función define su propia variable, esta variable sólo se puede usar aquí */

     if ( a>b )
     mayor = a;
     else mayor = b;

     return mayor;
     }

int main()
     {
     int num1, num2;
     int resultado;

     printf( "Introduzca dos números: " );
     scanf( "%i %i", num1, num2 );
     
     resultado = compara( num1, num2 );/* Recogemos el valor que devuelve la función en resultado */
     printf( "El mayor de los dos es %i\n", resultado );
	 
     return 0;
     }

En este ejemplo podíamos haber hecho también:

     printf( "El mayor de los dos es %i\n", compara( num1, num2 ) );

De esta forma nos ahorramos tener que definir la variable 'resultado'.

[Arriba]

Dónde se definen las funciones

Las funciones deben definirse siempre antes de donde se usan. Lo habitual en un programa es:

Sección Descripción
IncludesAquí se indican qué ficheros externos se usan
DefinicionesAquí se definen las constantes que se usan en el programa
Definición de variablesAquí se definen las variables globales (las que se pueden usar en TODAS las funciones)
Definición de funcionesAquí es donde se definen las funciones
Función mainAquí se define la función main.

Esta es una forma muy habitual de estructurar un programa. Sin embargo esto no es algo rígido, no tiene por qué hacerse así, pero es recomendable.

Se puede hacer de otra forma, también aconsejable. Consiste en definir después de las variables las cabeceras de las funciones, sin escribir su código. Esto nos permite luego poner las fucniones en cualquier orden. Ejemplos:

#include <stdio.h>
#include <conio.h>

void compara( int a, int b );     /* Definimos la cabecera de la función */

int main()
     {
     int num1, num2;
     int resultado;

     printf( "Introduzca dos números: " );
     scanf( "%i %i", num1, num2 );
     
     resultado = compara( num1, num2 );
     printf( "El mayor de los dos es %i\n", resultado );
	 
     return 0;
     }

int compara( int a, int b )     /* Ahora podemos poner el cuerpo de la función donde queramos. */
               /* Incluso después de donde la llamamos (main) */
     {
     int mayor;
     if ( a>b )
     mayor = a;
     else mayor = b;

     return mayor;
     }

Cuando se define la cabecera de la función sin su cuerpo (o código) debemos poner un ';' al final. Cuando definamos el cuerpo más tarde no debemos poner el ';', se hace como una función normal.

La definición debe ser igual cuando definimos sólo la cabecera y cuando definimos el cuerpo. Mismo nombre, mismo número y tipo de parámetros y mismo tipo de valor devuelto.

[Arriba]

Vida de una variable

Cuando definimos una variable dentro de una función, esa variable sólo es válida dentro de la función. Si definimos una variable dentro de main sólo podremos usarla dentro de main. Si por el contrario la definimos como variable global, antes de las funciones, se puede usar en todas las funciones.

Podemos crear una variable global y en una función una variable local con el mismo nombre. Dentro de la función cuando llamamos a esa variable llamamos a la local, no a la global. Esto no da errores pero puede crear confusión al programar y al analizar el código.

[Arriba]

Ejercicios

Ejercicio 1: Descubre los errores:

#include <stdio.h>
#include <conio.h>

int main()
     {
     int num1, num2;
     int resultado,

     printf( "Introduzca dos números: " );
     scanf( "%i %i", &num1, &num2 );
     resultado = compara( num1, num2 );
     printf( "El mayor de los dos es %i\n", resultado );
	 
     return 0;
     }

int compara( int a, int b );
     {
     int mayor;
     if ( a>b )mayor = a;
     else mayor = b;
     return mayor;
     }

Solución:

Ejercicio 2: Busca los errores.

#include <stdio.h>

int resultado( int parametro )

int main()
     {
     int a, b;

     a = 2; b = 3;
     printf( "%i", resultado( a );
	 
     return 0;
     }

char resultado( int parametro )
     {
     return parámetro+b;
     }

Solución:

[Arriba]

[Anterior] [Siguiente] [Contenido]

© Gorka Urrutia

www.elrincondelc.com