4 - Funciones
4 - Funciones
4 - Funciones
-FUNCIONES
1.-INTRODUCCIÓN A FUNCIONES
Básicamente una función es un bloque de código reutilizable
Por ejemplo, una declaración de función para una función que suma dos números podría verse así:
Esta declaración informa al compilador de que existe una función llamada sumar que toma dos
argumentos de tipo int y devuelve un int .
EJEMPLO
Ejemplo Completo
Veamos un ejemplo práctico que ilustra la definición, declaración e invocación de funciones en C:
#include <stdio.h> // Declaración de la función int suma(int a, int b); void app_main()
{ int resultado; // Invocación de la función resultado = suma(5, 3); printf("El resultad
o es: %d\n", resultado); } // Definición de la función int suma(int a, int b) { return a
+ b; }
Este código demuestra la creación de una función suma , que recibe dos enteros y devuelve su
suma. La función se declara antes de main y se invoca dentro de esta, pasando dos argumentos. El
resultado se muestra en consola.
Seguir correctamente estos pasos y las normas de sintaxis es crucial para el uso efectivo de
funciones en tus programas en C."
Variables Globales
Las variables globales, declaradas fuera de funciones, son accesibles desde cualquier parte del
archivo. Persisten durante toda la ejecución del programa, facilitando el compartir datos entre
funciones. No obstante, su uso excesivo puede complicar la comprensión y el mantenimiento del
código debido a posibles efectos secundarios.
Ejemplo:
Variables Estáticas
Declarar una variable como static dentro de una función permite que retenga su valor entre
llamadas sin cambiar su ámbito local. Esto es útil para mantener estados entre llamadas sin exponer
la variable fuera de la función.
Ejemplo:
#include <stdio.h> // Declaración de la función int suma(int a, int b); void app_main()
{ int resultado; // Invocación de la función resultado = suma(5, 3); printf("El
resultado es: %d\n", resultado); } // Definición de la función int suma(int a, int b) {
int s = a + b; return s; }
Ejemplo Completo Variable global
#include <stdio.h> // Declaración de la función int suma(int a, int b); int s ; void
app_main() { int resultado; // Invocación de la función resultado = suma(5, 7);
printf("El resultado es: %d\n", resultado); } // Definición de la función int suma(int
a, int b) { s = a + b; return s; }
Ejemplo Completo Variable static
5.-FUNCIONES INLINE
Las funciones inline en C son una extensión del estándar del lenguaje introducida con el estándar
C99. El propósito de las funciones inline es sugerir al compilador que inserte el código de la
función directamente en el punto donde se llama a la función, en lugar de realizar una llamada a la
función en el sentido tradicional. Este proceso se conoce como "inlining" y puede reducir la
sobrecarga (overhead) asociada con las llamadas a funciones, especialmente en el caso de
funciones pequeñas que se llaman frecuentemente dentro de bucles críticos para el rendimiento.
Sintaxis
Para declarar una función como inline , simplemente se utiliza la palabra clave inline antes del
tipo de retorno de la función en su definición o declaración:
inline int suma(int a, int b) { return a + b; }
Cómo Funcionan
Cuando el compilador procesa una función inline , intenta expandir el código de la función
directamente en el lugar donde se llama a la función. Esto elimina la necesidad de una llamada y
retorno de función, lo que puede mejorar el rendimiento al reducir la cantidad de instrucciones de
salto y la manipulación de la pila.
Consideraciones
Decisión del Compilador: Aunque se sugiere al compilador que trate la función como inline , es
solo eso, una sugerencia. El compilador tiene la libertad de ignorar esta sugerencia basándose en
su propio análisis y las optimizaciones que considere adecuadas. Por ejemplo, una función muy
grande o una que incluya bucles complejos, llamadas a otras funciones, o uso intensivo de recursos
puede no ser tratada como inline por el compilador.
Uso de Memoria: Aunque el inlining puede mejorar el rendimiento, también puede aumentar el
tamaño del código binario generado si se abusa de él, ya que el código de la función se duplica en
cada punto de llamada. Esto es algo a tener en cuenta especialmente en sistemas con memoria
limitada.
Definiciones Múltiples: Dado que el código de una función inline puede ser insertado en
múltiples lugares, es importante que la definición de la función esté disponible para cada unidad
de traducción (archivo de código fuente) que la llama. Esto a menudo significa que la definición
completa de la función inline debe estar en un archivo de cabecera (header file) incluido por
todos los archivos de código fuente que utilizan la función, a diferencia de las funciones normales,
cuya definición suele estar separada de su declaración.
Buenas Prácticas
Buenas Prácticas
Funciones Pequeñas: Las funciones inline son más efectivas cuando se utilizan para funciones
pequeñas y críticas para el rendimiento, como getters/setters o funciones matemáticas simples.
Pruebas de Rendimiento: Utiliza perfiles de rendimiento para determinar si el uso de inline
realmente ofrece beneficios de rendimiento en tu caso de uso específico.
7.-RECURSIÓN DE FUNCIONES
La recursión en el contexto de la programación con C (o cualquier otro lenguaje de programación)
se refiere a la técnica en la cual una función se llama a sí misma directamente o indirectamente para
resolver un problema. La recursión es una herramienta poderosa, especialmente útil para resolver
problemas que pueden dividirse en subproblemas más pequeños de la misma naturaleza que el
problema original, como la búsqueda binaria, la ordenación rápida (quicksort), el cálculo de
factorial, entre otros.
Para implementar la recursión de manera efectiva y segura, es crucial entender sus componentes
fundamentales y seguir ciertas prácticas.
#include <stdio.h> // Declaración de la función int fac(int y); void app_main() { int x
= 5; int f; f = fac(x); printf("%d\n",f); } // Definición de la función int fac(int y) {
if (y == 0) { // Caso base return 1; } else { // Caso recursivo return y * fac(y - 1); }
}
En este ejemplo, el caso base es cuando n es 0, en cuyo caso la función devuelve 1 directamente
sin hacer más llamadas recursivas. El caso recursivo reduce el problema al calcular el factorial de
n-1 y multiplicarlo por n , acercándose al caso base en cada iteración.
EJERCICIOS
Ejercicio 1: Encendido y Apagado de un LED con un Pulsador
Objetivo: Escribir un programa que encienda un LED cuando un pulsador esté presionado y lo
apague cuando se suelte.
Funciones a Implementar:
configurarGPIO() : Configura los pines del LED y del pulsador.
PRÁCTICA D EAPLICACIÓN