Carlos Abel Tarazona Aranda
Juan Andrés Cabrera Mendoza
gracias por el resumen
Edward John Rodriguez Soto
directo a los apuntes gracias!
Domina los tipos de funciones en C para escribir código claro y seguro. Aquí entenderás, con ejemplos directos, cómo declarar, llamar y definir funciones, cuándo usar void y cómo elegir el return type correcto para evitar errores como desbordamiento. También verás por qué en sistemas embebidos y drivers las funciones sin retorno son clave.
¿Qué tipos de funciones en C debes dominar?
Comprender las combinaciones entre argumentos y valor de retorno te da control total. El return type puede ser void si no regresa nada o un tipo como int, float o long si entrega un dato.
¿Cómo luce un prototipo con void?
void function_name(void); void function_name(int x, float y);
¿Cómo luce un prototipo con retorno?
int function_name(void); float function_name(long n);
¿Cómo se declaran, llaman y definen correctamente?
Diferenciar declaración, llamada y definición evita errores sutiles. La declaración anuncia la función al compilador. La llamada ejecuta. La definición contiene la lógica.
Ejemplo sin argumentos y sin valor de retorno:
// Declaración void function_name(void); // Llamada function_name(); // Definición void function_name(void) { // lógica }
Ejemplo con argumentos y sin valor de retorno:
// Declaración void function_name(float valor); // Llamada function_name(3.14f); // Definición void function_name(float valor) { // lógica }
Consejos esenciales al tipar argumentos y retornos:
¿Cuándo usar void y por qué es útil?
Tiene muchísimo sentido en hardware y sistemas embebidos. Muchas funciones solo cambian estados de pines o configuraciones internas y su efecto se ve fuera del programa, así que no necesitas que regresen un número.
Así, una función puede ejecutar una acción concreta y listo. No hay procesamiento numérico que deba devolverse, porque el objetivo es el cambio físico en el dispositivo. Elige void cuando el efecto observable está en el entorno y no en un valor de retorno.
¿Con qué combinaciones de argumentos y return type trabajas más y por qué? Comparte dudas o ejemplos que quieras reforzar.
Carlos Abel Tarazona Aranda
Juan Andrés Cabrera Mendoza
gracias por el resumen
Edward John Rodriguez Soto
directo a los apuntes gracias!
CRISTIAN BARBERO PÉREZ
Stiven Andres Arevalo
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.
CRISTIAN BARBERO PÉREZ
Interesante, muchas gracias compañero. Intentaré acostumbrarme a esta buena práctica.
Antonio Xolocotzi Villalva
¿Por que se usa int main() para definir la función principal y no void main()?
Luis Lira
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.
Julio Cardenas
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
Matias Arce
Irving Juárez
De hecho en las funciones que no tienen argumentos y que no regresan nada las podemos declarar de la siguiente manera:
void functionName(void);
Raúl Esteban Santacruz Gómez
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
Erik Ucenik
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
Leonardo Véliz
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.
Juan Fernando Moyano Ramírez
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)); }
Carlos Fernando Aguilar González
Hola Juan
Muy interesante el ejemplo que compartes pero no le entiendo con claridad. ¿Podrías por favor explicarlo?
Saludos
Edwin Geovany Castillo Ramirez
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.
Gabriel Obregón
📌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
David Cruz Portilla
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?
Juan Fernando Moyano Ramírez
Declarar la funcion y despues definirla es una buena practica, sin embargo, puedes declararla y definirla al mismo tiempo.
Carlos Fernando Aguilar González
Felicidades David por tu trabajo en codiziapp. Muy bueno!
Espero poder aprender muchas cosas nuevas.
Saludos!
Adrian Pique
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
DANNA MARIA GRACIA MONSALVE
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); }
Jorge Varas
Buena clase
Santiago Tellez Hernandez
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.
Gonzalo Zepeda Santos
Segun he visto en otros cursos, cuando tienes functionName(); tambien se le conoce como prototipo y se escribe ante de la funcion main.
Jose Montoya
Sintaxis de una función
/*
tipoRetorno nombreFuncion(param1, param2, ... paramN) {
// sentences
}
*/
PATRICIO ALBERTO MORALES FARIÑA
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).
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); >
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
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 }