Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline

¿Qué es una función en C?

Función en programación C es un bloque de código reutilizable que hace un programa más fácil de entender, probar y puede modificarse fácilmente sin cambiar el programa que la llama. Las funciones dividen el código y modularizan el programa para obtener mejores y más efectivos resultados. En resumen, un programa más grande se divide en varios subprogramas que se llaman funciones.

Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline

Cuando divides un programa grande en varias funciones, se vuelve fácil gestionar cada función individualmente. Cada vez que ocurre un error en el programa, puedes investigar fácilmente las funciones defectuosas y corregir solo esos errores. Puedes llamar y usar funciones fácilmente cuando se requieren, lo que automáticamente conduce a ahorrar tiempo y espacio.

En este tutorial, aprenderás:

Funciones de biblioteca vs. funciones definidas por el usuario

Todo programa 'C' tiene al menos una función que es la función main, pero un programa puede tener cualquier número de funciones. La función main() en C es el punto de partida de un programa.

En programación 'C', las funciones se dividen en dos tipos:

  1. Funciones de biblioteca
  2. Funciones definidas por el usuario

La diferencia entre las funciones de biblioteca y las definidas por el usuario en C es que no necesitamos escribir código para una función de biblioteca. Ya está presente dentro del archivo de cabecera que siempre incluimos al principio de un programa. Solo tienes que escribir el nombre de una función y usarla junto con la sintaxis adecuada. Printf, scanf son ejemplos de una función de biblioteca.

Mientras que, una función definida por el usuario es un tipo de función en la que tenemos que escribir el cuerpo de una función y llamar a la función cada vez que requerimos que la función realice alguna operación en nuestro programa.

Una función definida por el usuario en C siempre es escrita por el usuario, pero más tarde puede convertirse en parte de la biblioteca de 'C'. Es una gran ventaja de la programación en 'C'.

Las funciones de programación en C se dividen en tres actividades tales como:

  1. Declaración de función
  2. Definición de función
  3. Llamada a 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, solo especificamos el nombre de una función que vamos a usar en nuestro programa como una declaración de variable. No podemos usar una función a menos que sea declarada en un programa. Una declaración de función también se llama prototipo de función.

Las declaraciones de función (llamadas prototipo) usualmente se hacen encima de la función main() y toman la forma general:

tipo_dato_retorno nombre_funcion (tipo_dato argumentos);

Consideramos el siguiente programa que muestra cómo declarar una función cubo para calcular el valor del cubo de una variable entera

#include <stdio.h> /*Declaración de función*/ int add(int a,b); /*Fin de declaración de función*/ int main() {

Ten en cuenta que una función no necesariamente devuelve un valor. En este caso, se usa la palabra clave void.

Por ejemplo, la declaración de la función output_message indica que la función no devuelve un valor: void output_message();

Definición de función

La definición de función significa simplemente escribir el cuerpo de una función. Un cuerpo de función consiste en sentencias que van a realizar una tarea específica. Un cuerpo de función consiste en una sola sentencia o un bloque de sentencias. También es una parte obligatoria de una función.

int add(int a,int b) //cuerpo de función { int c; c=a+b; return c; }

Llamada a función

Una llamada a función significa llamar a una función cada vez que se requiere en un programa. Cada vez que llamamos a una función, realiza una operación para la cual fue diseñada. Una llamada a función es una parte opcional de un programa.

 resultado = add(4,5);

Aquí está el código completo:

#include <stdio.h> int add(int a, int b); //declaración de función int main() { int a=10,b=20; int c=add(10,20); //llamada a función printf("Adición:%d\n",c); getch(); } int add(int a,int b) //cuerpo de función { int c; c=a+b; return c; }

Salida:

Adición:30

Argumentos de función

Los argumentos de una función se usan para recibir los valores necesarios por la llamada a la función. Se emparejan por posición; el primer argumento se pasa al primer parámetro, el segundo al segundo parámetro y así sucesivamente.

Por defecto, los argumentos se pasan por valor en el que una copia de los datos se da a la función llamada. La variable realmente pasada no cambiará.

Consideramos el siguiente programa que demuestra parámetros pasados por valor:

int add (int x, int y); int main() { int a, b, resultado; a = 5; b = 10; resultado = add(a, b); printf("%d + %d\ = %d\n", a, b, resultado); return 0;} int add (int x, int y) { x += y; return(x);}

La salida del programa es:

5 + 10 = 15

Ten en cuenta que los valores de a y b pasados a la función add no cambiaron porque solo su valor fue pasado al parámetro x.

Alcance de variables

El alcance de variable significa la visibilidad de las variables dentro del código de un programa.

En C, las variables que se declaran dentro de una función son locales a ese bloque de código y no pueden referenciarse 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. Las constantes declaradas con un #define al principio de un programa son accesibles desde todo el programa. Consideramos el siguiente programa que imprime el valor de la variable global desde tanto main como función definida por el usuario:

#include <stdio.h> int global = 1348; void test(); int main() { printf("desde la función main : global =%d \n", global); test () ; return 0;} void test (){ printf("desde función definida por usuario : global =%d \n", global);}

Resultado:

desde la función main : global =1348 desde función definida por usuario : global =1348

Discutimos los detalles del programa:

Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline

  1. Declaramos una variable global entera con 1348 como valor inicial.
  2. 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 las variables globales pueden accederse en cualquier parte del programa.
  3. Imprimimos la variable global dentro de la función main.
  4. Llamamos a la función test para imprimir el valor de la variable global.

En C, cuando los argumentos se pasan a parámetros de función, los parámetros actúan como variables locales que serán destruidas al salir de la función.

Cuando usas variables globales, úsalas con precaución porque pueden llevar a errores y pueden cambiar en cualquier parte del programa. Deben inicializarse antes de usar.

Variables estáticas

Las variables estáticas tienen un alcance local. Sin embargo, no son destruidas al salir de la función. Por lo tanto, una variable estática retiene su valor para siempre y puede ser accedida cuando la función es re-entrada. Una variable estática se inicializa cuando se declara y necesita el prefijo static.

El siguiente programa usa 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 numero_llamadas = 1; printf("Hola número %d\n", numero_llamadas); numero_llamadas ++; }

El programa muestra:

Hola número 1 Hola número 2 Hola número 3 Hola número 4 Hola número 5 

Funciones recursivas

Considera el factorial de un número que se calcula de la siguiente manera 6! = 6 * 5 * 4 * 3 * 2 * 1.

Este cálculo se hace como calcular repetidamente fact * (fact -1) hasta que fact iguale 1.

Una función recursiva es una función que se llama a sí misma e incluye una condición de salida para terminar las llamadas recursivas. En el caso del cálculo del número factorial, la condición de salida es fact igual a 1. La recursión funciona "apilando" llamadas hasta que la condición de salida es verdadera.

Por ejemplo:

#include <stdio.h> int factorial(int numero); int main() { int x = 6; printf("El factorial de %d es %d\n", x, factorial(x)); return 0;} int factorial(int numero) { if (numero == 1) return (1); /* condición de salida */ else return (numero * factorial(numero - 1)); }

El programa muestra:

 El factorial de 6 es 720

Aquí, discutimos los detalles del programa:

Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline

  1. 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 de salida, o condición base. Cuando la condición es verdadera, los valores generados anteriormente se multiplicarán entre sí, y el valor final del factorial es devuelto.
  2. Declaramos e inicializamos una variable entera con valor "6" y luego imprimimos su valor factorial llamando a nuestra función factorial.

Considera el siguiente gráfico para entender mejor el mecanismo recursivo que consiste en llamar a la función a sí misma hasta que se alcance el caso base o condición de parada, y después de eso, recopilamos los valores previos:

Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline

Funciones inline

La función en programación C se usa para almacenar las instrucciones más usadas con frecuencia. Se usa 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 sentencia desde donde saltó a la definición de la función.

Cada vez que usamos funciones, requerimos un encabezado de puntero extra para saltar a la definición de la función y volver a la sentencia. Para eliminar la necesidad de tales encabezados de puntero, usamos funciones inline.

En una función inline, una llamada a función es reemplazada directamente por el código real del programa. No salta a ningún bloque porque todas las operaciones se realizan dentro de la función inline.

Las funciones inline se usan principalmente para pequeños cálculos. No son adecuadas cuando se involucra computación grande.

Una función inline es similar a la función normal excepto que la palabra clave inline se coloca antes del nombre de la función. Las funciones inline se crean con la siguiente sintaxis:

inline nombre_funcion () { //definición de función }

Escribamos un programa para implementar una función inline.

inline int add(int a, int b) //declaración de función inline { return(a+b); } int main() { int c=add(10,20); printf("Adición:%d\n",c); getch(); }

Salida:

Adición: 30

El programa anterior demuestra el uso de una función inline para la adición de dos números. Como podemos ver, hemos devuelto la adición de dos números dentro de la función inline solamente sin escribir líneas extra. Durante la llamada a la función solo hemos pasado valores sobre los que tenemos que realizar la adición.

Resumen


Lenguaje C

  1. Cómo Pasar Arrays a Funciones en C++: Guía Práctica
  2. Cuatro patrones probados para funciones definidas por el usuario en C
  3. Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
  4. Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
  5. Funciones en C++ Explicadas con Ejemplos de Código Prácticos
  6. calloc() en C: Asignación de memoria inicializada a cero y ejemplo práctico
  7. Dominando funciones en C: Estructura, declaración y mejores prácticas
  8. Dominar las funciones en Verilog para diseño RTL eficiente
  9. Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
  10. Función round() en Python explicada con ejemplos prácticos
  11. Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas