Funciones en programación C con ejemplos: recursiva y en línea
¿Qué es una función en C?
Función en programación C es un bloque de código reutilizable que hace que un programa sea más fácil de entender, probar y puede modificarse fácilmente sin cambiar el programa que lo llama. Las funciones dividen el código y modularizan el programa para obtener resultados mejores y efectivos. En resumen, un programa más grande se divide en varios subprogramas que se denominan funciones.
Cuando divide un programa grande en varias funciones, resulta fácil administrar cada función individualmente. Siempre que se produzca un error en el programa, podrá investigar fácilmente las funciones defectuosas y corregir sólo esos errores. Puede llamar y utilizar funciones fácilmente cuando sea necesario, lo que automáticamente le permitirá ahorrar tiempo y espacio.
Biblioteca vs. Funciones definidas por el usuario
Cada programa 'C' tiene al menos una función que es la función principal, pero un programa puede tener cualquier número de funciones. La función main () en C es un punto de partida de un programa.
En la programación 'C', las funciones se dividen en dos tipos:
- Funciones de biblioteca
- Funciones definidas por el usuario
La diferencia entre la biblioteca y las funciones definidas por el usuario en C es que no necesitamos escribir un código para una función de la biblioteca. Ya está presente dentro del archivo de encabezado que siempre incluimos al comienzo de un programa. Sólo tienes que escribir el nombre de una función y utilizarla junto con la sintaxis adecuada. Printf, scanf son ejemplos de una función de biblioteca.
Considerando que una función definida por el usuario es un tipo de función en la que tenemos que escribir un cuerpo de una función y llamar a la función siempre que necesitemos que la función realice alguna operación en nuestro programa.
Una función definida por el usuario en C siempre la escribe el usuario, pero más adelante puede formar parte de la biblioteca de C. Esta es una de las principales ventajas de la programación en C.
Las funciones de programación en C se dividen en tres actividades, tales como,
- Declaración de función
- Definición de la función
- Llamada de función
Declaración de función
La declaración de función significa escribir el nombre de un programa. Es una parte obligatoria para usar funciones en código. En una declaración de función, simplemente especificamos el nombre de una función que vamos a usar en nuestro programa como una declaración de variable. No podemos utilizar una función a menos que esté declarada en un programa. Una declaración de función también se llama "Función prototipo."
Las declaraciones de funciones (llamadas prototipo) generalmente se realizan encima de la función principal () y toman la forma general:
return_data_type function_name (data_type arguments);
- Un espacio para hacer una pausa, reflexionar y reconectarse en privado. tipo_datos_retorno: es el tipo de datos de la función de valor devuelta a la declaración de llamada.
- Un espacio para hacer una pausa, reflexionar y reconectarse en privado. nombre de la función: va seguido de paréntesis
- Argumentos Los nombres con sus declaraciones de tipo de datos se colocan opcionalmente entre paréntesis.
Consideremos el siguiente programa que muestra cómo declarar una función de cubo para calcular el valor del cubo de una variable entera.
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
Tenga en cuenta que una función no necesariamente devuelve un valor. En este caso, se utiliza la palabra clave void.
Por ejemplo, la declaración de la función mensaje_salida indica que la función no devuelve un valor: void mensaje_salida();
Definición de función
La definición de función significa simplemente escribir el cuerpo de una función. El cuerpo de una función consta de declaraciones que realizarán una tarea específica. El cuerpo de una función consta de una sola o un bloque de declaraciones. También es una parte obligatoria de una función.
int add(int a,int b) //function body { int c; c=a+b; return c; }
Llamada de función
Una llamada a una función significa llamar a una función cada vez que se la requiere en un programa. Siempre que llamamos a una función, esta realiza una operación para la cual fue diseñada. Una llamada a una función es una parte opcional de un programa.
result = add(4,5);
Aquí está el código completo:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
Salida:
Addition:30
Argumentos de función
Los argumentos de una función se utilizan para recibir los valores necesarios mediante la llamada a la función. Están emparejados por posición; el primer argumento se pasa al primer parámetro, el segundo al segundo parámetro y así sucesivamente.
De forma predeterminada, los argumentos se pasan por valor en el que se proporciona una copia de los datos a la función llamada. La variable realmente pasada no cambiará.
Consideremos el siguiente programa que demuestra los parámetros pasados por valor:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
La salida del programa es:
5 + 10 = 15
Tenga en cuenta que los valores de a y b se pasaron a la función agregar no se cambiaron porque solo se pasó su valor al parámetro x.
Alcance variable
Alcance variable significa la visibilidad de variables dentro de un código del programa.
En C, las variables que se declaran dentro de una función son locales para ese bloque de código y no se puede hacer referencia a ellas fuera de la función. Sin embargo, las variables que se declaran fuera de todas las funciones son globales y accesibles desde todo el programa. Constantes declaradas con un #definir En la parte superior de un programa se puede acceder a ellos desde todo el programa. Consideremos el siguiente programa que imprime el valor de la variable global tanto de la función principal como de la definida por el usuario:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
Resultado:
from the main function : global =1348 from user defined function : global =1348
Discutimos los detalles del programa:
- Declaramos una variable global entera con 1348 como valor inicial.
- Declaramos y definimos una función test() que no toma argumentos ni devuelve un valor. Esta función solo imprime el valor de la variable global para demostrar que se puede acceder a las variables globales desde cualquier parte del programa.
- Imprimimos la variable global dentro de la función principal.
- Llamamos a la función de prueba para imprimir el valor de la variable global.
En C, cuando se pasan argumentos a los parámetros de una función, los parámetros actúan como variables locales que se destruirán al salir de la función.
Cuando se utiliza variables globalesÚselos con precaución porque pueden provocar errores y pueden cambiar en cualquier parte del programa. Deben inicializarse antes de su uso.
Variables estáticas
Las variables estáticas tienen un alcance local. Sin embargo, no se destruyen al salir de la función. Por lo tanto, una variable estática conserva su valor para siempre y se puede acceder a ella cuando se vuelve a ingresar a la función. Una variable estática se inicializa cuando se declara y necesita el prefijo static.
El siguiente programa utiliza una variable estática:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
El programa muestra:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Funciones recursivas
¡Considere el factorial de un número que se calcula de la siguiente manera 6! =6* 5 * 4 * 3 * 2 * 1.
Este cálculo se realiza calculando repetidamente hecho * (hecho -1) hasta que el hecho sea igual a 1.
Una función recursiva es una función que se llama a sí misma e incluye una condición de salida para finalizar las llamadas recursivas. En el caso del cálculo del número factorial, la condición de salida es igual a 1. La recursividad funciona "apilando" llamadas hasta que la condición de salida sea verdadera.
Por ejemplo:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
El programa muestra:
The factorial of 6 is 720
Aquí discutimos los detalles del programa:
- Declaramos nuestra función factorial recursiva que toma un parámetro entero y devuelve el factorial de este parámetro. Esta función se llamará a sí misma y disminuirá el número hasta que se alcance la condición base o de salida. Cuando la condición es verdadera, los valores generados previamente se multiplicarán entre sí y se devolverá el valor factorial final.
- Declaramos e inicializamos una variable entera con el valor "6" y luego imprimimos su valor factorial llamando a nuestra función factorial.
Considere la siguiente tabla para comprender mejor el mecanismo recursivo que consiste en llamar a la función por sí misma hasta que se alcance el caso base o condición de detención, y luego de eso, recopilamos los valores anteriores:
Funciones en línea
La función en la programación C se utiliza para almacenar las instrucciones utilizadas con más frecuencia. Se utiliza para modularizar el programa.
Cada vez que se llama a una función, el puntero de instrucción salta a la definición de la función. Después de ejecutar una función, el puntero de instrucción vuelve a la declaración desde donde saltó a la definición de la función.
Siempre que utilizamos funciones, requerimos un extra puntero head para saltar a la definición de la función y volver a la declaración. Para eliminar la necesidad de tales punteros, utilizamos funciones en línea.
En una función en línea, una llamada a una función se reemplaza directamente por un código de programa real. No salta a ningún bloque porque todas las operaciones se realizan dentro de la función en línea.
Las funciones en línea se utilizan principalmente para cálculos pequeños. No son adecuados cuando se trata de informática de gran tamaño.
Una función en línea es similar a una función normal, excepto que la palabra clave inline se coloca antes del nombre de la función. Las funciones en línea se crean con la siguiente sintaxis:
inline function_name () { //function definition }
Escribamos un programa para implementar una función en línea.
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
Salida:
Addition: 30
El programa anterior demuestra el uso de una función en línea para la suma de dos números. Como podemos ver, hemos devuelto la suma de dos números dentro de la función en línea únicamente sin escribir líneas adicionales. Durante la llamada a la función, simplemente hemos pasado valores sobre los que tenemos que realizar la suma.
Resumen
- Una función es un miniprograma o un subprograma.
- Las funciones se utilizan para modularizar el programa.
- La biblioteca y las definidas por el usuario son dos tipos de funciones.
- Una función consta de una declaración, un cuerpo de función y una parte de llamada de función.
- La declaración de función y el cuerpo son obligatorios.
- Una llamada a función puede ser opcional en un programa.
- El programa C tiene al menos una función; es la función principal ().
- Cada función tiene un nombre, tipo de datos, valor de retorno o parámetros nulos.
- Cada función debe definirse y declararse en su programa C.
- Tenga en cuenta que lo normal variables en una función C se destruyen tan pronto como salimos de la llamada a la función.
- Los argumentos pasados a una función no se cambiarán porque pasaron por valor ninguno por dirección.
- El alcance de la variable se conoce como la visibilidad de las variables dentro de un programa.
- Hay variables globales y locales en Programación en C