Funciones y hola mundo

En este episodio construimos el clásico 'hola mundo' no sin antes explicar qué es una función, cómo construimos una función en C y qué tipos de datos más importantes tiene C.

Cuando nos adentramos en el lenguaje C, lo primero que debemos entender es que se trata de un lenguaje imperativo y procedimental. Esto significa que C no nos facilita las cosas por sí mismo; somos nosotros quienes debemos indicarle paso a paso qué debe hacer el programa, como si siguiéramos una receta de cocina. No hay magia ni automatismos: cada instrucción debe estar explícitamente escrita para que el ordenador la ejecute.

En C, las instrucciones se dividen en varios tipos fundamentales. Primero, están las asignaciones, que nos permiten guardar valores en memoria temporal para usarlos durante los cálculos o manipulaciones de datos. Luego, tenemos las condicionales, que nos permiten decidir qué instrucciones ejecutar según se cumpla o no una condición determinada. Por ejemplo, en una calculadora, podríamos usar una condicional para evitar dividir por cero. También contamos con los bucles, que repiten un conjunto de instrucciones varias veces hasta que se cumple una condición, muy útiles para sumatorios o iteraciones. Finalmente, están las llamadas a funciones, que son instrucciones que ejecutan otras funciones dentro del programa.

El paradigma procedimental en C implica que todo el código está organizado en funciones o procedimientos, que son bloques de código que realizan tareas específicas. Estas funciones pueden recibir parámetros de entrada y devolver resultados, similar a las funciones matemáticas. Por ejemplo, una función factorial podría recibir un número y devolver su factorial. Es importante destacar que en C no existe código fuera de funciones; todo debe estar dentro de alguna función.

Una función clave en cualquier programa en C es la función main. Esta es la primera función que el sistema operativo ejecuta cuando lanzamos un programa compilado en C. El código dentro de main se ejecuta secuencialmente, y puede incluir llamadas a otras funciones, asignaciones, condicionales y bucles. El valor que devuelve main es utilizado por el sistema operativo para determinar si el programa terminó correctamente o si hubo algún error. Por convención, devolver 0 indica que todo fue bien.

En cuanto a los tipos de datos elementales en C, encontramos cuatro principales. Los números enteros, representados con la palabra clave int, almacenan valores sin decimales, como 10 o 255. Luego están los números decimales o flotantes, con la palabra clave float, que almacenan valores con parte decimal, como 10.34 o 65.21. Es importante recordar que en C el separador decimal es el punto, no la coma. También tenemos los caracteres, representados con char, que almacenan un solo símbolo, como una letra o un signo, y se escriben entre comillas simples. Para agrupar varios caracteres, usamos cadenas de caracteres, que se escriben entre comillas dobles y representan palabras o frases completas. Por último, el tipo void representa la ausencia de valor y se usa en funciones que no devuelven nada, conocidas como procedimientos.

Para comenzar a escribir código en C, debemos definir funciones especificando su tipo de retorno, nombre y parámetros. Por ejemplo, la función main se define como una función que devuelve un entero y no recibe parámetros, así:

int main() {
    return 0;
}

Aquí, return 0; indica que la función devuelve el valor 0 al sistema operativo, señalando que el programa terminó sin errores. Aunque este programa no hace nada visible, es un punto de partida.

Para hacer algo más útil, podemos imprimir un mensaje en pantalla usando la función printf, que viene incluida en la biblioteca estándar de C. Una llamada a printf se escribe dentro de main antes del return, así:

#include <stdio.h>

int main() {
    printf("hola mundo");
    return 0;
}

Es fundamental incluir el archivo de cabecera stdio.h con la directiva #include al inicio del código. Este archivo contiene las definiciones necesarias para que el compilador reconozca la función printf. Sin esta inclusión, el compilador nos mostrará advertencias porque no sabe qué es printf.

Cada instrucción en C debe terminar con un punto y coma para indicar el final de la instrucción. En el ejemplo anterior, tanto la llamada a printf como la instrucción return terminan con punto y coma.

Al compilar y ejecutar este programa, veremos en la consola el mensaje hola mundo. Así, hemos creado un programa básico en C que imprime texto en pantalla y devuelve un valor al sistema operativo para indicar que todo ha ido bien.

En próximos pasos, podemos explorar cómo definir funciones con parámetros, realizar asignaciones de variables y utilizar printf para imprimir diferentes tipos de datos y formatos. Este es el comienzo para entender cómo construir programas más complejos en C, partiendo de estos fundamentos esenciales.

Lista de reproducción
  1. 1
    Instalar CodeBlocks
    15 minutos
  2. 2
    Funciones y hola mundo
    17 minutos
  3. 3
    Variables y tipos de datos
    17 minutos
  4. 4
    Condicionales y operadores lógicos
    16 minutos
  5. 5
    Bucles
    11 minutos
  6. 6
    Punteros
    12 minutos
  7. 7
    Arrays
    14 minutos
  8. 8
    Estructuras
    12 minutos
  9. 9
    Otras construcciones de C
    9 minutos
  10. 10
    Memoria dinámica
    8 minutos
  11. 11
    El preprocesador (parte 1)
    10 minutos
  12. 12
    El preprocesador (parte 2)
    9 minutos
  13. 13
    Archivos de cabecera y múltiples .c (parte 1)
    8 minutos
  14. 14
    Archivos de cabecera y múltiples .c (parte 2)
    9 minutos
  15. 15
    C desde la línea de comandos (parte 1)
    8 minutos
  16. 16
    C desde la línea de comandos (parte 2)
    9 minutos
  17. 17
    Break y continue
    10 minutos
  18. 18
    Goto
    13 minutos
  19. 19
    Manipulación de bits
    15 minutos
  20. 20
    Máscaras de bit
    19 minutos
  21. 21
    Archivos (1): fopen y fclose
    13 minutos
  22. 22
    Archivos (2): leer con fgetc
    9 minutos
  23. 23
    Archivos (3): fseek y ftell
    11 minutos
  24. 24
    Archivos (4): leer con fgets
    9 minutos
  25. 25
    Archivos (5): fputc y fputs
    7 minutos
  26. 26
    Archivos (6): volcar en archivos con fwrite
    10 minutos
  27. 27
    Archivos (7): fread, fwrite y los arrays
    10 minutos
  28. 28
    Archivos (8): entrada estándar y salida estándar
    9 minutos
  29. 29
    Archivos (9): buffers
    14 minutos
  30. 30
    Archivos (y 10): otras funciones útiles con archivos
    5 minutos
  31. 31
    printf (1)
    18 minutos
  32. 32
    printf (parte 2)
    12 minutos
  33. 33
    scanf (parte 1)
    17 minutos
  34. 34
    scanf (parte 2)
    17 minutos
  35. 35
    fprintf, sprintf y snprintf
    8 minutos
  36. 36
    Tipos de datos opacos
    13 minutos
  37. 37
    Bibliotecas estáticas
    13 minutos
  38. 38
    Bibliotecas dinámicas
    15 minutos
  39. 39
    Más flags: i mayúscula (include), wall, werror, pedantic...
    12 minutos
  40. 40
    pkg-config
    12 minutos
  41. 41
    Make
    17 minutos
  42. 42
    GDB
    21 minutos
  43. 43
    Variables globales
    6 minutos
  44. 44
    extern
    9 minutos
  45. 45
    Funciones variádicas
    12 minutos
  46. 46
    El optimizador de GCC y la opción -O
    12 minutos
  47. 47
    Volatile
    6 minutos