Tipos de funciones en C: argumentos y valores de retorno
Clase 4 de 12 • Curso de Funciones en C
Contenido del curso
Clase 4 de 12 • Curso de Funciones en C
Contenido del curso
Carlos Abel Tarazona Aranda
Juan Andrés Cabrera Mendoza
Edward John Rodriguez Soto
CRISTIAN BARBERO PÉREZ
Stiven Andres Arevalo
CRISTIAN BARBERO PÉREZ
Jesús Ignacio García Fernández
Jesús Ignacio García Fernández
Antonio Xolocotzi Villalva
Luis Lira
Julio Cardenas
Matias Arce
Irving Juárez
Raúl Esteban Santacruz Gómez
Erik Ucenik
Leonardo Véliz
Juan Fernando Moyano Ramírez
Carlos Fernando Aguilar González
Edwin Geovany Castillo Ramirez
Gabriel Obregón
David Cruz Portilla
Juan Fernando Moyano Ramírez
Carlos Fernando Aguilar González
Adrian Pique
DANNA MARIA GRACIA MONSALVE
Jorge Varas
Santiago Tellez Hernandez
Gonzalo Zepeda Santos
Jose Montoya
PATRICIO ALBERTO MORALES FARIÑA
Tipos de retorno en funciones :D
<1. Funciones sin argumentos y sin valor de retorno void functionName(); //Declarando la function. functionName(); //Invocando o ejecutando a la function void functionName()// definicion de la function { //logica } 2. Funciones con argumentos, pero sin valor de retorno void functionName(float); //Declarando la function. functionName(float); //Invocando o ejecutando a la function void functionName(float) // definicion de la function { //logica } 3. Funciones sin argumentos, pero con valor de retorno int functionName(); 4. Funciones que tienen argumentos y valor de retorno int functionName(int, float); >
gracias por el resumen
directo a los apuntes gracias!
También es posible declarar e inicializar la función directamente, por ejemplo el código de la clase anterior quedaría así:
#include <stdio.h> int integersPower(int base, int exp){ int i,p; p=1; for(i=1; i<=exp; i++){ p *= base; } return p; } int main() { int i; for(i=0; i<10; i++){ printf("exp = %d, result = %d \n", i, integersPower(2,i)); } return 0; }
Me parece más cómodo y te ahorras una línea de código, no sé si tendrá algún inconveniente
La declaración de una función se conoce también como prototipo de la función. Los prototipos de las funciones son utilizados por el compilador para verificar que se accede a la función de la manera adecuada con respecto al número y tipo de parámetros, y al tipo de valor de retorno de la misma.
Puede llegar a ser muy importante hacer uso de esta buena practica (hacer el prototipo de una función) ya que el compilador nos podría generar errores. Aunque también depende del IDE que usemos porque cuando hago uso del prototipado en el editor de código VIM me genera un error y no me compila el programa, tengo que hacerlo así como lo muestras en el ejemplo, en Visual Studio Code si funciona.
De igual manera es aconsejable hacer el prototipo (declarar) primero y después de main incicializarla.
Interesante, muchas gracias compañero. Intentaré acostumbrarme a esta buena práctica.
Sugerencia @equipoPlatzi utilizar una ++guía de estilo++ para poder escribir todos unos programas que sean legibles fácilmente independientemente de quien los escriba.
caso de uso donde la función no necesita que devuelva nada
#include <unistd.h> void putchar(char a) { write(1, &a, 1); }
¿Por que se usa int main() para definir la función principal y no void main()?
Es porque cuando termina de ejecutarse el programa se debe saber si terminó correctamente o no. A mi parecer, la forma más rápida para decir esto es con un 1 o un 0.
El uso mas frecuente de los progemas en c es llamarlos dentro de un script.
En el llamado de programa se le pasan los argumentos necesarios.
Cuando los programas terminan bien suelen devolver un cero, en caso contrario devuelven otro valor que puede ser usado en el script para comunicar el tipo de error que ha ocurrido.
De esta manera el script puede determinar si se ejecuto correctamente el programa
Tipos de retorno de funciones
Ya vimos lo que son las funciones, ahora toca ver que tipos de retorno pueden tener cada una. Para esto tenemos 4 tipos:
void functionName(); //Declarando la function. functionName(); //Invocando o ejecutando a la function void functionName()// definicion de la function { //logica o statments }
void functionName(float); //Declarando la function. functionName(float); //Invocando o ejecutando a la function void functionName(float) // definicion de la function { //logica o statments }
int functionName(); //Declarando la function. functionName(); //Invocando o ejecutando a la function int functionName() // definicion de la function { //logica }
int functionName(int); //Declarando la function. functionName(dato); //Invocando o ejecutando a la function int functionName(int dato) // definicion de la function { //logica }
De hecho en las funciones que no tienen argumentos y que no regresan nada las podemos declarar de la siguiente manera:
void functionName(void);
Si primero declare la function y despues la llamo o invoco. ¿Como opera la función, si aun la funcion no esta definida o no "existe"ya que dicha definicion esta de ultimo.
En el ejemplo es:
***Declaracion de la funcion *Ejecucion o llamar la funcion *Definición de la función **
Que sucede en un codigo ms complejo si cambio el orden de ejecucion de la funcion por la definicion de la funcion, quedando del asiguiente manera:
***Declaracion de la funcion Definición de la función Ejecucion o llamar la funcion
Esto se debe a cómo funciona el compilador de C.
Tomemos un código de ejemplo.
#include <stdio.h> void escribir_hola(); int main() { escribir_hola(); } void escribir_hola() { printf("Hola mundo\n"); }
Lo primero que ocurre es que el compilador analiza el código y busca posibles errores en la sintáxis. En esta fase se lanzaría el error que comentas, ya que el compilador vería que se llama a la función escribir_hola(), sin esta estar definida. Para evitar esto, tenemos la línea void escribir_hola();, que no define la función, pero la declara.
Esto es como una promesa al compilador. Como decirle: "Hey, vas a ver esta función. Sé que no la he definido aún, pero te prometo que la he definido en alguna parte."
Después, el linker (una parte del compilador) se encargará de buscar dónde está definida esa función para poder usarla.
Esto es útil porque no siempre vas a tener código así, es posible que tengas funciones ya compiladas (convertidas a binario) en un archivo y quieras usarlas, pero el compilador se te ponga pesado.
De hecho, archivos como los que incluyes al hacer #include <stdio.h> están llenos de declaraciones de funciones.
Te invito a aprender más sobre este tema con este video sobre el linker y este video sobre el compilador
De hecho hasta este punto del curso la mayoría de las funciones que he usado son de tipo void sin retorno, con y sin argumentos, y las otras funciones con retorno que he usado son solamente las que he visto en esta clase y en el curso de Programación Estructurada para la función de los factoriales.
Hola a todos, he creado una funcion que encuentra la raiz cuadrada exacta de un numero, este es el codigo:
int raiz_cuadrada_exacta(int numero) { int i=1; while(i< numero) { if (i*i == numero) { return i; } else { i += 1; continue; } } } int main() { printf("%d", raiz_cuadrada_exacta(144)); }
Hola Juan
Muy interesante el ejemplo que compartes pero no le entiendo con claridad. ¿Podrías por favor explicarlo?
Saludos
Están muy interesante las clases. Yo como soy nuevo en esto estoy un poco perdido con algunos términos y procesos, pienso que este curso es para mas avanzado, Sería recomendable que nos pudieran explicar sobre el return type, void, y otras cosas.
📌Funciones en C
🧩 Clasificación
Funciones = Argumentos (sí/no) + Retorno (sí/no) 👉 4 combinaciones posibles.
🔹 1. Sin argumentos ❌ – Sin retorno ❌
📖 Definición: void functionName();
⚡ Llamada: functionName();
🎯 Uso: ejecutar acción directa.
🔧 Ejemplo: mover un robot.
🔹 2. Con argumentos ✅ – Sin retorno ❌
📖 Definición: void functionName(dataType arg1, dataType arg2);
🎯 Uso: usar datos de entrada → acción inmediata.
🔧 Ejemplo: enviar señales de control.
🔹 3. Sin argumentos ❌ – Con retorno ✅
📖 Definición: dataType functionName();
🎯 Uso: generar o calcular un valor.
🔧 Ejemplo: obtener temperatura de un sensor.
🔹 4. Con argumentos ✅ – Con retorno ✅
📖 Definición: dataType functionName(dataType arg1);
🎯 Uso: procesar datos de entrada → devolver resultado.
🔧 Ejemplo: calcular el área de un triángulo.
🧭 Guía rápida para elegir
Es una buena práctica declara todas las funciones primero y después hacer su lógica o puedo omitir la declaración y pasarme directo a la inicialización de la función?
Declarar la funcion y despues definirla es una buena practica, sin embargo, puedes declararla y definirla al mismo tiempo.
Felicidades David por tu trabajo en codiziapp. Muy bueno!
Espero poder aprender muchas cosas nuevas.
Saludos!
No se si hablan mas adelante pero falto explicar el tipo de funcion booleana para determinar que un valor sea verdadero o falso en caso de que necesites cambiarlo
Ejemplo de uso de una función Void para recibir los parámetros de la función de potencia:
#include <stdio.h> int nExponent (int base, int n); void parametros(); int b; int exponenteee; int main(){ parametros(); for (int i = 1; i <= exponenteee; i++) { printf("\nn=%d resultado de la potencia= %d", i, nExponent(b,i)); } return 0; } int nExponent (int base, int n){ int r=1; for (int k = 0; k < n; k++){ r=r*base; } return r; } void parametros(){ printf("ingrese el la base: "); scanf("%d", &b); printf("\ningrese el exponente: "); scanf("%d", &exponenteee); }
Buena clase
Van a haber cuatro tipos de funciones, dos de las cuales no van a retornar ningún tipo de valor, pero pueden tener argumentos o no. Las otras dos funciones van a retornar u valor de salida, pero pueden tener o no argumentos de entrada.
Segun he visto en otros cursos, cuando tienes functionName(); tambien se le conoce como prototipo y se escribe ante de la funcion main.
Sintaxis de una función
/*
tipoRetorno nombreFuncion(param1, param2, ... paramN) {
// sentences
}
*/
Con el paso de parámetros, estamos viendo como diversas partes del programa se comunican entre sí: -funciones que no reciben argumentos ni retornan valores -funciones que reciben argumentos, pero que no retornan valores -funciones que reciben argumentos, y retornan valores -programas que llaman a otros programas sin paso de argumentos -programas que llaman a otros programas , con paso de argumentos(usando sockets).