Aprende, paso a paso y con ejemplos claros, cómo crear funciones en C sin argumentos, cómo pasar parámetros y cómo migrar a un return type entero. Verás el flujo completo: declaración, llamada y definición, más los errores típicos como el de variables no declaradas o el mal uso del ámbito.
¿Qué es una función void sin argumentos en C?
Una función con return type void no devuelve valor. En el ejemplo, se usa STDIO con #include <stdio.h> y se trabaja en main sin argumentos adicionales. main retorna 0 para indicar ejecución correcta al compilador.
Usar #include <stdio.h> para printf.
int main(void) y return 0; para finalizar.
Declarar, llamar y definir la función en ese orden.
Buenas prácticas: indicar void en parámetros cuando no recibe argumentos.
¿Cómo se declara, llama y define una función en C?
Primero se declara, luego se llama desde main, y al final se define. Se muestra una suma simple con impresión de resultado.
#include<stdio.h>voiddemo(void);// declaraciónintmain(void){demo();// llamadareturn0;}voiddemo(void){// definiciónint A;int B;int sum; A =100; B =100; sum = A + B;printf("The result is: %d\n", sum);}
¿Por qué aparece el error sum undeclared first use?
Se intentó usar sum sin haberla declarado. La corrección es declarar la variable antes de asignar e imprimir. Tras declarar int sum;, la compilación indica compile successfully y muestra: "The result is two hundred".
¿Cómo usar parámetros y mejores prácticas en nombres?
Se modifica la función para recibir parámetrosint A, int B y se renombra a add (en inglés) como buena práctica de nombres. Se pueden pasar valores desde variables o literales.
¿Qué cambia al usar parámetros int A, int B?
Ya no se declaran A y B dentro de la función. Se pasan desde main. Se muestran dos formas para entregar valores: usando variables o valores directos.
#include<stdio.h>intadd(int A,int B);// declaraciónintmain(void){int A =100;int B =100;// forma 1: usando variables.printf("The result is: %d\n",add(A, B));// forma 2: pasando literales directamente.printf("The result is: %d\n",add(100,100));return0;}intadd(int A,int B){// definiciónreturn A + B;}
¿Cómo imprimir el resultado y evitar errores de ámbito?
Si intentas imprimir una variable interna de la función (por ejemplo add si fuera local) desde main, obtendrás valores erróneos. La solución correcta es imprimir el retorno de la función: printf("%d", add(100, 100));. Leer la terminal y la consola ayuda a detectar estos fallos rápido.
¿Qué implica cambiar el return type a int?
Al cambiar de void a int, la función devuelve un valor y ya no imprime dentro de ella. Se comenta el printf interno y se retorna la suma. Luego el printf se hace en main con el valor retornado.
¿Cómo se implementa el return y se corrige la llamada a printf?
Cambiar la firma: de void a int.
Agregar return con la variable calculada.
Mover printf a main e imprimir el resultado de la llamada.
Evitar usar nombres de variables y funciones de forma ambigua.
Mantener nombres en inglés como add por consistencia.
¿Tienes dudas sobre pasar argumentos por valor o por referencia en C? Compártelas en los comentarios para abordarlas a detalle en el siguiente contenido.
Funciones sin argumentos y sin valor de retorno :D
<voiddemo();int main(){demo();return0;}void(){ int a, b, suma; a =100; b =100;printf("El resultado es %i", suma);}>
Funciones con argumentos, pero sin valor de retorno
<int a, b;voidsum(int a, int b);int main(){sum(100,100);return0;}voidsum(int a, int b){ int sum; sum = a + b;printf("El resultado es %i", sum);}>
Funciones que tienen argumentos y valor de retorno
<int a, b;int sum(int a, int b);int main(){sum(100,100);printf("El resultado es %i",sum(100,100));return0;}int sum(int a, int b){ int sum; sum = a + b;return sum;}>
¿Por qué la creación de funciones se divide en 3 partes? y ¿Por qué la declaración debe ir después de las librerías? ¿por qué la definición de la función debe ir después de main?
Hay personas que dicen que la declaración previa es una buena práctica... Yo personalmente no lo hago, en el mismo momento que la declaro, la construyo y ya está, por lo que por ahí te puedes ahorrar un paso.
Eso sí, la invocación va aparte de la construcción de la función, por lo que no podemos reducir más el proceso.
Lo de que vaya encima, también es a gusto... Yo personalmente las pongo encima de la función main (porque así se hace en otros lenguajes y me acostumbré), pero en nada afecta al código.
Supongo que se verá en el siguiente curso. Pero lo que pasa es que en lugar de pasar una variable pasó la función (no el return de la función como cuando lo corrigió) y con ese número identifica C a la función.
Es un poco confuso por que le puso el nombre "add" a la función y a la variable interna, pero lo que sucedió es que, al no ponerle los paréntesis y los argumentos, el código trató de imprimir la variable add que se estaba usando dentro de la función add(), pero esa variable no estaba definida para ser usada fuera de la función.
Código de la función potencia y suma en uno
#include <stdio.h>// Hace la potencia de dos nuemros enterosint power(int base, int exponente);//Suma dos valoresint add(int a, int b);int main(){for(int exponente =0; exponente <10; exponente++){printf("%d ^ %d = %d\n",2, exponente,power(2, exponente));}printf("\nAddition result is %d",add(7,3));return0;}int power(int base, int exponente){ int resultado =1;for(int i =1; i <= exponente; i++){ resultado = base * resultado;}return resultado;}int add(int a, int b){ int add; add = a + b;return add;}
Los argumentos que VisualStudioCode le puso al profes por defecto representan el numero de argumentos que tenga el programa y una cadena de caracteres donde viene cada uno de esos argumentos como string. En pocas palabras, son cosas un poco mas avanzadas que creo que no aparecen en este curso.
Entre paréntesis → (void) para indicar que no recibe nada.
Solo ejecuta instrucciones internas (no devuelve resultados).
💡 Ejemplo resumido
Una función llamada demo que suma dos números fijos y muestra el resultado en pantalla.
👉 Uso típico: mostrar mensajes, inicializar valores, ejecutar acciones internas.
🔹 2. Función con argumentos
✨ Características
Tipo de retorno → puede ser void si no devuelve nada.
Recibe parámetros → por ejemplo, dos enteros.
Permite trabajar con valores distintos sin modificar el código interno.
💡 Ejemplo resumido
Una función add que recibe dos números, los suma y muestra el resultado.
👉 Uso típico: hacer cálculos con datos que el programa le envía.
🔹 3. Función con tipo de retorno
✨ Características
Indica el tipo de valor que devolverá → por ejemplo, int.
Usa la instrucción return para enviar un resultado al programa.
El valor devuelto se puede guardar en una variable y reutilizar.
💡 Ejemplo resumido
La función add ahora devuelve la suma en lugar de imprimirla directamente. El programa guarda ese valor en una variable result y luego lo muestra.
👉 Uso típico: cálculos cuyo resultado se necesita en varias partes del programa.
Una pregunta Ricardo. En la definición de funciones existe alguna restricción con el nombre de estas es decir se pueden nombrar libremente o existen palabras reservadas en su uso. Gracias.
Se pueden nombrar libremente, tanto las funciones como las variables. Lo importante es que sean lo suficientemente auto-explícitas. Que con su nombre los demás puedan saber cual es el objetivo de esa función.
#include<stdio.h>voidadd();intmain(){add(100,100);return0;}voidadd(int a,int b){printf("The result of the sum is %d", a + b);}```#include \<stdio.h>voidadd();intmain(){add(100,100);return0;}voidadd(int a,int b){printf("The result of the sum is %d", a + b);}
<code>```#include <stdio.h>voiddemo(int a, int b);main(){/* code */ int a, b;printf("ingrese el valor de a ");scanf("%i",&a);printf("ingrese el valor de b ");scanf("%i",&b);demo(a,b);return0;}voiddemo(int a, int b){ int sum; sum = a + b;printf("la suma es %d", sum);}
Algo que me ha servido al momento de escribir código es recolectar dentro de funciones acciones que suelo utilizar frecuentemente. Por decir, si en tu programa necesitas que el usuario escriba varios datos(nombre, apellidos, etc), podrías hacer una función que lea los datos de entrada y simplemente cambie el mensaje dependiendo de lo que le pidas que ingrese.
Al momento de utilizar las funciones no debemos olvidar que se tienen tres partes principales, en una se declara la función , posterior a esto la debemos llamar y por ultimo debemos definir la lógica que esta va a tener.
#include <stdio.h>voiddemo();voidadd(int a, int b);int main(int argc, char const*argv[]){demo();add(1,2);return0;}voiddemo(){ int a, b, sum; a =100; b =200; sum = a + b;printf("sum = %d\n", sum);printf("Hello World!\n");}voidadd(int a, int b){ int sum; sum = a + b;printf("sum = %d\n", sum);}