Professional Documents
Culture Documents
1 FUNCIONES 1
FUNCIONES
Una función es un conjunto de instrucciones agrupado bajo un mismo nombre. Así cada vez que se
desea ejecutar las instrucciones se emplea el nombre de la función en lugar de simplemente copiar y
pegar las instrucciones.
Al igual que las variables, las funciones tienen tres momentos en un programa: (a) cuando se declara su
existencia –prototipo– (b) cuando se definen, y (c) cuando se usa en algún punto del programa –
llamada–. Estos tres momentos los analizaremos a lo largo de este texto.
Un “prototipo” es la declaración de la existencia de una función. Se indica que existe una función cuyo
nombre, parámetros y valor de retorno se detallan en el prototipo. El prototipo se asemeja mucho a la
definición de la función sólo que, en este caso, no se explica qué hace la función. Todo prototipo
termina con un punto y coma (;). Por ejemplo, en la imagen se indica que existe una función
denominada suma que recibe dos parámetros enteros y regresa un valor entero:
Como al compilador le importa unicamente el tipo de parámetros que una función requiere para verificar
la llamada, estrictamente no es necesario asignarles nombre, por lo que seria totalmente equivalente
declarar la función suma de la siguiente manera:
Se define a una función cuando se especifican las operaciones que dicha función debe realizar cada vez
que sea llamada. Dentro de la definición debe indicarse el tipo de valor que regresa, los parámetros que
recibe y las operaciones que debe hacer con esos parámetros.
Donde:
<cuerpo de la función> instrucciones que deberán ejecutarse cada vez que se llame a la
función. Puede contener declaraciones de variables, y se delimita por llaves {}
Una función puede entregar un valor como resultado de su ejecución. Este valor puede ser asignado a
una variable o empleado dentro de una expresión y se denomina valor de retorno. Por ejemplo, la
función rand() regresa un número entero aleatorio que puede asignarse a una variable o emplearse en
una expresión.
Además observe que se ha definido que la función main() entrega como resultado de su llamada un
número entero
Cuando se ejecuta función el número entero que se regresa (12345) queda establecido por la instrucción
return -línea 12-.
Particularmente la función main() al ser el punto de arranque del programa el valor de retorno se lo
entrega al sistema operativo, y el sistema operativo lo reporta cuando termina el programa, observe que,
cuando se ejecuta este programa desde CodeBlocks, la consola reporta dicho valor al momento de la
salida.
Por otro lado, si la función fue declarada como una función que no devuelve algún valor (void) y se
desea indicar que en ese punto debe terminar la función, entonces la instrucción return debe ser
invocada sin ningún otro valor y terminada con un punto y coma, es decir: return;
1.2.2 PARÁMETROS
Si la función requiere información adicional para poder llevar a cabo su tarea, entonces recibe esta
información al momento de ser invocada (parámetros). Por ejemplo, suponga que se desea sumar dos
números y el resultado de la llamada será su suma:
La línea cuatro presenta el “prototipo” de la función, es decir se declara que existe una función llamada
suma(), que requiere para operar dos valores (parámetros) el primero se llamará a y el segundo b,
además ambos son enteros. Sabemos que esta línea es la declaración de la existencia de la función
porque termina con punto y coma.
Los parámetros y las variables declaradas dentro de una función sólo pueden ser utilizados dentro de la
función. Su vida comienza con la invocación a la función y termina con la finalización de la función 1.
Una función no puede “ver” las variables que existen en otra función, el único mecanismo para
compartir información son los parámetros.
Considérese la definición de la función suma (líneas 19 a 23) y la llamada a la función suma de la línea
8:
Al momento de llamar a la función se copia cada valor que se proporciona en la llamada a los
parámetros a y b de la función asignándolos de izquierda a derecha en orden de aparición, el
valor 10 al parámetro a y el valor 20 al parámetro b.
Los parámetros a y b dentro de la función son variables y se comportan como cualquier otra
variable dentro de la función. Simplemente se inicializan con los valores que reciben en el
momento en que la función es llamada.
Considere ahora la llamada de la línea 11, en este caso el valor copiado al parámetro a es el valor de la
variable x, mientras que el parámetro b se le asigna el valor 20. Como x vale 40 (asignado en la línea
10), entonces a vale 40 y b vale 20. La figura siguiente ilustra el mecanismo:
1
Si se emplea el modificador static al momento de declarar una variable, ésta no deja de existir cuando termina la
función, sin que continúa existiendo a lo largo de todo el programa. Usted deberá justificar ampliamente por qué utiliza este
modificador
Pero ¿qué pasa si deseamos modificar el valor de x, es decir que se haga algo en la función y que al salir
x haya sido modificada?
De la misma manera en que podemos pasar un entero, también podemos pasar como parámetro una
dirección y su declaración es similar a la de cualquier variable tipo apuntador.
Justo en el momento en que se llama a la función inc() el funcionamiento seria más o menos:
Este es el mecanismo que se debe seguir siempre que se quiera que una variable sea modificada dentro
de una función.
Siempre que se define una función es necesario que el compilador conozca cuál es la estructura del
encabezado de la función, a fin de verificar, en el programa, que el uso de esa función es correcto.
Sin embargo, el compilador fue capaz de generar el archivo ejecutable (después de todo únicamente hay
advertencias y, nos han enseñado que esos no importan). Al ejecutar el programa obtenemos la siguiente
Una posible alternativa hubiera sido mover toda la función antes de la primera llamada a la función. Sin
duda esto también soluciona el problema, pero, hay ocasiones donde ello no es viable o simplemente no
se desea modificar su posición.