Documentos de Académico
Documentos de Profesional
Documentos de Cultura
- PROCEDIMIENTOS Y FUNCIONES
CONTENIDO
6.1 La importancia de las funciones
6.2 Funciones sin parámetros
6.3 Funciones que reciben y devuelven parámetros
6.4 Prototipos
6.5 Transferencia de parámetros desde el sistema operativo
6.6 Definición de subprogramas
6.7 Funcionamiento de subprogramas
6.8 Manipulación de subprogramas
6.1 La importancia de las funciones
Las funciones dividen tareas grandes de computación en varias más pequeñas, y permiten
la posibilidad de construir sobre lo que otros ya han hecho, en lugar de comenzar desde cero. Las
funciones apropiadas ocultan los detalles de operación de las partes del programa que no
necesitan saber acerca de ellos, así que dan claridad a la totalidad y facilitan la penosa tarea de
hacer cambios.
El lenguaje C se diseñó para hacer que las funciones fueran eficientes y fáciles de usar; los
programas escritos en C se componen de muchas funciones pequeñas en lugar de sólo algunas
grandes. Un programa puede residir en uno o más archivos fuente, los cuales pueden compilarse
por separado y cargarse junto con funciones de biblioteca previamente compiladas.
La declaración y definición de funciones es el área donde el estándar ANSI ha hecho los
cambios más visibles a C.
La mayor parte de los programas de cómputo que resuelven problemas de la vida real, son
mucho más complejos de lo que podríamos creer, la experiencia ha demostrado que la mejor forma
de desarrollar y mantener un programa grande es construirlo a partir de piezas menores o
módulos, siendo cada una de ellas más fácil de manipular que el programa original. Ésta técnica se
conoce como divide y vencerás.
tipo_regresado nombre_función(lista_parámetros)
{
cuerpo_de_la_función
}
nada(){}
El tipo que se devuelve se considera entero y no recibe ningún parámetro, este tipo de
funciones es útil cuando se reserva lugar al desarrollar un programa.
En ésta sección abordaremos las funciones que no reciben ningún valor como argumento.
Cada función debe limitarse a ejecutar una tarea sencilla y bien definida, y el nombre de la
función debería expresar de forma clara dicha tarea. Ello facilitará la abstracción y promovería la
reutilización del software. Si no puede elegir un nombre conciso, que exprese lo que la función
ejecuta, es probable que su función esté intentando ejecutar demasiadas tareas diversas. A
menudo es mejor dividir dicha función en varias funciones más pequeñas.
Cuando una función no recibe ningún valor, la lista de parámetros es void. Ejemplo:
Cuando una función no recibe parámetros puede omitirse el tipo void o si se prefiere
puede escribirse.
El determinar si una función debe o no recibir parámetros está a disposición del
programador y sus buenas prácticas de programación.
La proposición return
La proposición return es el mecanismo para que la función que se llama regrese un valor a
su invocador. Al return le puede seguir cualquier expresión.
return expresión;
Si una función va a usar argumentos, debe declarar variables que acepten los valores de
los argumentos. Éstas variables se llaman parámetros formales de la función y se comportan como
variables locales dentro de la función, creándose al entrar en la función y destruyéndose al salir. La
declaración de parámetros aparece después del nombre de la función al definirla.
Los parámetros formales tienen que ser del mismo tipo que los argumentos usados al
llamar una función (el compilador no dará error pero los resultados serán inesperados).
Al igual que con variables locales, se pueden hacer asignaciones a los parámetros de una
función o usarlos en cualquier expresión válida. Se pueden usar como cualquier otra variable.
Ejemplo:
Y no sólo se pueden pasar o devolver valores enteros, también hay funciones que pueden
recibir otros tipos de valores y a su vez retornar otros valores. Muchas funciones numéricas como
sqrt (para calcular la raíz cuadrada), sin (seno) y cos (coseno) regresan double.
Llamadas a funciones
Lo que hasta aquí hemos visto nos sirve solamente para definir funciones, pero aún no
hemos considerado como hacer uso de ellas en los programas. Para poder usar una función que
ya ha sido definida es necesario invocar la función o hacer una llamada a la función.
Las funciones son llamadas para su ejecución desde cualquier parte del código, teniendo
en cuenta que antes deben haber sido declaradas y definidas.
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. Si la función retorna un valor podemos asignarlo a alguna variable, si no, podemos
ignorar el valor de retorno.
Por valor: Este método copia el valor de un argumento en el parámetro formal de la función. De
esta forma, los cambios en los parámetros de la función no afectan a las variables que se usan
en la llamada.
main()
{
int t=10;
printf(“%d %d”, cuad(t), t);
}
int cuad(int x)
{
x=x*x;
return (x);
}
Por referencia: Este método copia la dirección del argumento en el parámetro de la función. De
esta forma, los cambios hechos a los parámetros afectan a la variable usada en la llamada.
Para usar este tipo de paso de argumentos es necesario usar apuntadores, estos se podrán
explicar en apartados más adelante, aquí sólo es importante saber que existe la posibilidad de
modificar los datos que se pasan, dentro de la función.
main()
{
int x=10, y=20;
printf(“X=%d e Y=%d”,x, y);
inter(&x,&y);
printf(“X=%d e Y=%d”,x,y);
}
void inter(int *p, int *q)
{
int temp;
temp=*p; *p=*q; *q=temp;
}
6.4 Prototipos
Ejemplo:
6.5 Transferencia de parámetros desde el sistema operativo
Los detalles de las líneas de código del programa son insignificantes para este momento, lo
interesante aquí es la transferencia de argumentos al programa desde la línea de órdenes. Es
importante recordar que la línea de órdenes a la que nos referimos puede ser el MS-DOS o cmd de
Windows o la consola de Linux.