Funciones

Definición de Función

En el lenguaje C una función se define de la siguiente manera:

tipo nombre (tipo param1, tipo param2, ...)

{

/*cuerpo de la función*/

...

[return expresión;]

}

 

Donde:

En C no se permite la definición anidada de funciones, es decir, definir una función dentro de otra. Si se permite la recursividad.

Una variable es global cuando se declara fuera de una función, y se puede utilizar en todo el programa desde el punto de la declaración. Todas las variables usadas en los ejemplos mostrados en estos apuntes son locales, es decir, declaradas dentro de un bloque de sentencias, y su ámbito de aplicación es dentro del bloque en que son declaradas. En general, No es aconsejable el uso de variables globales.

 

Declaración de una Función

Toda función debe ser declarada antes de ser definida. La forma de declarar una función es la siguiente:

tipo nombre (tipo param1, tipo param2, ...);

La declaración de una función de esta forma se llama prototipo.

Las funciones son siempre globales, de manera que su declaración debe ser realizada al principio del programa; si la primera función definida en éste es la main(), antes de esta definición. La declaración puede evitarse si la función es definida antes de ser invocada, sin embargo, es aconsejable declarar al comienzo del programa los prototipos de las funciones que vamos a definir, incluyendo comentarios sobre su finalidad.

 

Llamadas a funciones

Las funciones pueden ser llamadas desde cualquier punto de un programa.

La llamada de una función se produce mediante el uso de su nombre en una sentencia, pasando una lista de argumentos que deben coincidir en número y tipo con los especificados en la declaración, en caso contrario se produciría una conversión de tipos cuyos resultados pueden no ser los esperados. En general, los parámetros se pueden pasar por valor y por referencia, usando en este caso punteros (dirección de memoria donde se almacena la variable), que serán vistos más adelante. En este último caso será posible modificar el valor de la variable usada en la llamada.

Ejemplo_Fun_1. Ejemplo de uso de funciones donde es obligatorio la declaración

 

#include  <stdio.h>

 

/* Prototipo de la función */

int Maximo(int var1, int var2); /*Devuelve el mayor de var1 y var2 */

 

/* Función principal */

int main (void)

  {

  int i = 3, j = 5;

 

  printf ("Maximo (%d, %d) = %d\n", i, j, Maximo (i,j));

  return (Maximo (i, j));

  }

 

/* Definición de la función */

int Maximo (int a, int b)

/* Esto también se podría hacer:

int Maximo (a,b)

int a,b; */

{

  if (a < b)

    return (b);

  else

    return (a);

}

 

Ejemplo_Fun_2. Ejemplo anterior pero definiendo la función de manera que no sea necesaria su declaración.

 

#include  <stdio.h>

 

/* Definición de la función */

int Maximo (int a, int b)

/* Esto también se podría hacer:

int Maximo (a,b)

int a,b; */

{

  if (a < b)

    return (b);

  else

    return (a);

}

 

/* Función principal */

int main (void)

  {

  int i = 3, j = 5;

 

  printf ("Maximo (%d, %d) = %d\n", i, j, Maximo (i,j));

  return (Maximo (i, j));

  }

 

 

Ejemplo_Fun_3. Ejemplo de función tipo void y sin parámetros

 

#include <stdio.h>

#include <stdlib.h>

 

/* Declaración de la función */

void suerte ();

 

/* Función principal */

int main (void)

  {

  int i;

  

  for (i=0; i<10; i++)

  suerte();

  return 0;

  }

 

/* Definición de la función */

void suerte ()

  {

  int i;

  i= 1 + (int) (10.0 * rand() / (RAND_MAX + 1.0));

/* La constante RAND_MAX esta definida en el fichero stdlib.h */

  printf ("Tu número de la suerte es %d\n", i);

  }

 

Ejemplo_Fun_4. Ejemplo error típico en el uso de funciones

 

#include <stdio.h>

/* Prototipo */

void cambia (int var1, int var2);

 

int main ()

  {

  int i=1, j=2;

  Cambia (i, j);

  printf ("i=%d, j=%d", i, j);

  return 0;

  }

 

/* Definición */

void cambia (int i, int j)

  {

  int tmp;

  tmp=i;

  i = j;

  j = tmp;

  }

Responde a la siguiente pregunta:

  1. ¿Por qué no se han intercambiado los valores de las variables  i y j tras la ejecución de la función Cambia() en main()?