¿Qué es una función en C?
La función en la programación C es un bloque de código reutilizable que hace que un programa sea más fácil de entender, probar y se puede modificar fácilmente sin cambiar el programa de llamada. 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, es fácil administrar cada función individualmente. Siempre que ocurra un error en el programa, puede investigar fácilmente las funciones defectuosas y corregir solo esos errores. Puede llamar y utilizar funciones fácilmente cuando sea necesario, lo que automáticamente le permitirá ahorrar tiempo y espacio.
En este tutorial, aprenderá:
- Biblioteca vs. Funciones definidas por el usuario
- Declaración de función
- Definición de función
- Llamada de función
- Argumentos de función
- Alcance variable
- Variables estáticas
- Funciones recursivas
- Funciones en línea
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 biblioteca. Ya está presente dentro del archivo de encabezado que siempre incluimos al comienzo de un programa. Solo tiene que escribir el nombre de una función y usarla junto con la sintaxis adecuada. Printf, scanf son los 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 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 luego puede ser parte de la biblioteca 'C'. Es una gran ventaja de la programación 'C'.
Las funciones de programación de C se dividen en tres actividades tales como,
- Declaración de función
- Definición de 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 usar una función a menos que esté declarada en un programa. Una declaración de función también se denomina " prototipo de función ".
Las declaraciones de función (llamadas prototipo) generalmente se hacen encima de la función main () y toman la forma general:
return_data_type function_name (data_type arguments);
- El return_data_type : es el tipo de datos de la función de valor devuelto de nuevo a la declaración llamando.
- El nombre_función : va seguido de paréntesis
- Los nombres de los argumentos con sus declaraciones de tipo de datos se colocan opcionalmente entre paréntesis.
Consideramos el siguiente programa que muestra cómo declarar una función de cubo para calcular el valor de cubo de una variable entera
#include/*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 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. El cuerpo de una función consta de declaraciones que van a realizar una tarea específica. El cuerpo de una función consta de una sola declaración o de un bloque. 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 función significa llamar a una función siempre que se requiera en un programa. Siempre que llamamos a una función, realiza una operación para la que fue diseñada. Una llamada a función es una parte opcional de un programa.
result = add(4,5);
Aquí está el código completo:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}
Producción:
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á.
Consideramos 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 ayb que se pasaron para agregar la función no se cambiaron porque solo su valor se pasó 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 a 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. Las constantes declaradas con un #define en la parte superior de un programa son accesibles desde todo el programa. Consideramos el siguiente programa que imprime el valor de la variable global de la función principal y definida por el usuario:
#includeint 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 =1348from 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 en 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 los argumentos se pasan a los parámetros de la función, los parámetros actúan como variables locales que se destruirán al salir de la función.
Cuando utilice variables globales, utilícelas con precaución porque pueden provocar errores y pueden cambiar en cualquier parte del programa. Deben inicializarse antes de usarse.
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 la función. Una variable estática se inicializa cuando se declara y necesita el prefijo static.
El siguiente programa usa una variable estática:
#includevoid 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 1Hi number 2Hi number 3Hi number 4Hi number 5
Funciones recursivas
¡Considere el factorial de un número que se calcula como sigue 6! = 6 * 5 * 4 * 3 * 2 * 1.
Este cálculo se realiza como un cálculo repetido de 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 es verdadera.
Por ejemplo:
#includeint 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 */elsereturn (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 de salida o base. 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 valor "6" y luego imprimimos su valor factorial llamando a nuestra función factorial.
Considere el siguiente cuadro para comprender mejor el mecanismo recursivo que consiste en llamar a la función en sí misma hasta que se alcanza el caso base o condición de parada, 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 más utilizadas. Se utiliza para modularizar el programa.
Siempre 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 instrucción desde donde saltó a la definición de la función.
Siempre que usamos funciones, necesitamos un puntero adicional para saltar a la definición de la función y regresar 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 de 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 pequeños cálculos. No son adecuados cuando se trata de una gran informática.
Una función en línea es similar a la función normal, excepto que la palabra clave en línea 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();}
Producción:
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 solo sin escribir líneas adicionales. Durante la llamada a la función, acabamos de pasar valores sobre los que tenemos que realizar una 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 de valor de retorno o un vacío, parámetros.
- Cada función debe definirse y declararse en su programa C.
- Tenga en cuenta que las variables ordinarias 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 la programación C