Funciones
Una función es una sección de código en C que tiene un nombre, es independiente,
que ejecuta una tarea específica y que opcionalmente regresa un valor al programa que la llama.
Una función tiene un nombre. Cada función tiene un nombre único. Con ese nombre, en cualquier
otra parte del programa, se pueden ejecutar los enunciados contenidos en la función. A esto se
le conoce como la llamada de la función. Una función puede ser llamada desde el interior de otra función.
Una función es independiente. Una función puede ejecutar su trabajo sin interferencias de, y sin interferir con,
otras partes del programa.
Una función ejecuta una tarea específica. Esta es la parte fácil de la definición. Una tarea es un trabajo concreto
que un programa debe ejecutar como parte de su operación general, como enviar una línea de texto a la pantalla, inicializar
algunas variables, calcular una raíz cúbica, etc.
Una función puede regresar un valor al programa que la llama. Cuando el programa llama a una función, se ejecutan
los enunciados que contiene. Éstos, en caso de que se desee, pueden pasar información de regreso al programa que la llama.
Ejemplo:
#include <stdio.h>
long cubo(long x);
int main(void)
{
long entrada, respuesta;
printf("Teclea un valor entero: ");
scanf("%ld", &entrada);
respuesta = cubo(entrada);
printf("El cubo de %ld es %ld.", entrada, respuesta);
}
long cubo(long x)
{
long resultado;
resultado = x * x * x;
return (resultado);
}
Un programa en C no ejecuta los enunciados de una función sino hasta que ésta es llamada por otra
parte del programa. Cuando una función es llamada, el programa puede enviar la información para la
función en forma de uno o más argumentos. Un argumento es un dato del programa que es necesario para
que la función ejecute su tarea. Luego los enunciados de la función se ejecutan, realizando la tarea
para la cual fueron diseÒados. Cuando terminan los enunciados de la función, la ejecución regresa a la
misma posición en el programa de donde fue llamada la función. Las funciones pueden enviar información
de regreso al programa en forma de un valor de retorno.
Un prototipo de función proporciona al compilador la descripción de una función que será definida más adelante
en el programa. El prototipo incluye un tipo de retorno, que indica el tipo de variable que regresará la función.
También incluye el nombre de la función, que deberá describir lo que hace la función. El prototipo también
contiene el tipo de las variables de los argumentos que serán pasados a la función. Opcionalmente puede
contener los nombres de las variables que serán pasadas. Un prototipo siempre termina con un punto y coma.
Una definición de función es, de hecho, la función. La definición contiene el código que será ejecutado.
La primera línea de la definición de función, llamada encabezado de función, debe ser idéntica al prototipo
de función, a excepción del punto y coma. Un encabezado de función no debe terminar en punto y coma.
Adicionalmente, aunque los nombres de variables de los argumentos son opcionales en el prototipo, deben ser
incluidos en el encabezado de función. A continuación del encabezado se encuentra el cuerpo de la función,
que contiene los enunciados que se ejecutarán con la función. El cuerpo de la función debe estar encerrado
entre dos llaves. Si el tipo de retorno de la función es cualquier otro diferente a void,
se debe incluir en un return enunciado que regrese un valor que se ajuste al tipo de retorno.
Ejemplos de Prototipos:
double cuadrado (double numero);
void print_report (int reportNumber);
Ejemplos de definición de función:
double cuadrado (double numero)
{
return (numero * numero);
}
void print_report(int reportNumber)
{
if(reportNumber == 1)
puts("Imprimiendo reporte 1");
else
puts("En pausa...");
}
Usando funciones en los programas en C se puede practicar la programación estructurada, en la cual las tareas
individuales del programa se ejecutan por secciones independientes de código de programa.
Existen dos razones importantes por las cuales es importante la programación estructurada:
-
Es más fácil escribir un programa estructurado, ya que los problemas complejos de programación
son divididos en varias tareas más pequeÒas y más simples. Cada tarea se ejecuta por una función,
en la cual el código y las variables se encuentran aislados del resto del programa. Se puede avanzar
más rápido resolviendo uno a la vez con estas tareas relativamente simples.
-
Es más fácil depurar un programa estructurado. Si el programa tiene un error (algo que hace que
trabaje de manera equivocada), un diseÒo estructurado facilita el aislamiento del problema en una
sección específica de código (una función específica).
Una ventaja relacionada con la programación estructurada es el tiempo que se puede ahorrar.
Si se escribe una función para ejecutar una tarea determinada en un programa, rápida y fácilmente
puede usarse en otro programa que necesite ejecutar la misma tarea. Incluso si el nuevo programa necesita
realizar una tarea ligeramente diferente, muchas veces se encuentra que modificar una función que se ha
creado anteriormente es más fácil que escribir una nueva a partir de cero. Considérese qué tanto se han
usado las funciones printf() y
scanf(), aún cuando nunca se ha
visto el código que las compone. Si las funciones han sido creadas para hacer una sola tarea, es muy fácil
usarlas en otros programas.