Primeros pasos con el lenguaje C

Hola Mundo

Para crear un programa C simple que imprima “Hello, World” en la pantalla, use un editor de texto para crear un nuevo archivo (por ejemplo, hello. c — la extensión del archivo debe ser .c) que contiene el siguiente código fuente:

Hola C

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}

Demostración en vivo en Coliru

Veamos este sencillo programa línea por línea

#include <stdio.h>

Esta línea le dice al compilador que incluya el contenido del archivo de encabezado de la biblioteca estándar stdio.h en el programa. Los encabezados suelen ser archivos que contienen declaraciones de funciones, macros y tipos de datos, y debe incluir el archivo de encabezado antes de usarlos. Esta línea incluye stdio.h para que pueda llamar a la función puts().

Ver más sobre encabezados.

int main(void)

Esta línea inicia la definición de una función. Indica el nombre de la función (main), el tipo y la cantidad de argumentos que espera (void, que significa ninguno) y el tipo de valor que devuelve esta función (int). La ejecución del programa comienza en la función main().

{
    …
}

Las llaves se usan en pares para indicar dónde comienza y termina un bloque de código. Se pueden usar de muchas maneras, pero en este caso indican dónde comienza y termina la función.

    puts("Hello, World");

Esta línea llama a la función puts() para enviar texto a la salida estándar (la pantalla, por defecto), seguida de una nueva línea. La cadena de salida se incluye entre paréntesis.

"Hello, World" es la cadena que se escribirá en la pantalla. En C, cada valor literal de cadena debe estar entre comillas dobles "...".

Ver más sobre cadenas.

En los programas C, cada declaración debe terminar con un punto y coma (es decir, ;).

    return 0;

Cuando definimos main(), lo declaramos como una función que devuelve un int, lo que significa que debe devolver un número entero. En este ejemplo, devolvemos el valor entero 0, que se utiliza para indicar que el programa se cerró correctamente. Después de la instrucción return 0;, el proceso de ejecución terminará.

Editando el programa

Los editores de texto simples incluyen vim o gedit en Linux, o Bloc de notas en Windows. Los editores multiplataforma también incluyen Visual Studio Code o Sublime Text.

El editor debe crear archivos de texto plano, no RTF ni ningún otro formato.

Compilando y ejecutando el programa

Para ejecutar el programa, este archivo fuente (hello.c) primero debe compilarse en un archivo ejecutable (por ejemplo, hello en el sistema Unix/Linux o hello.exe en Windows). Esto se hace usando un compilador para el lenguaje C.

Ver más sobre la compilación

Compilar usando GCC

GCC (GNU Compiler Collection) es un compilador de C ampliamente utilizado. Para usarlo, abra una terminal, use la línea de comando para navegar a la ubicación del archivo fuente y luego ejecute:

gcc hello.c -o hello

Si no se encuentran errores en el código fuente (hello.c), el compilador creará un archivo binario, cuyo nombre viene dado por el argumento de la opción de línea de comando -o ( hola). Este es el archivo ejecutable final.

También podemos utilizar las opciones de aviso -Wall -Wextra -Werror, que ayudan a identificar problemas que pueden hacer que el programa falle o produzca resultados inesperados. No son necesarios para este programa simple, pero esta es una forma de agregarlos:

gcc -Wall -Wextra -Werror -o hello hello.c

Usando el compilador clang

Para compilar el programa usando clang puedes usar:

clang -Wall -Wextra -Werror -o hello hello.c

Por diseño, las opciones de la línea de comando clang son similares a las de GCC.

Usando el compilador de Microsoft C desde la línea de comando

Si utiliza el compilador cl.exe de Microsoft en un sistema Windows compatible con Visual Studio y si todas las variables de entorno están configuradas, este ejemplo en C se puede compilar utilizando el siguiente comando que producirá un ejecutable ‘hello.exe’ dentro del directorio en el que se ejecuta el comando (hay opciones de advertencia como ‘/W3’ para ‘cl’, más o menos análogas a ‘-Wall’, etc. para GCC o clang).

cl hello.c

Ejecutando el programa

Una vez compilado, el archivo binario se puede ejecutar escribiendo ./hello en la terminal. Tras la ejecución, el programa compilado imprimirá Hello, World, seguido de una nueva línea, en el símbolo del sistema.

Original “¡Hola, mundo!” en K&R C

El siguiente es el “Hello, World!” original. programa del libro El lenguaje de programación C de Brian Kernighan y Dennis Ritchie (Ritchie fue el desarrollador original del lenguaje de programación C en Bell Labs), conocido como “K&R”:

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

Tenga en cuenta que el lenguaje de programación C no estaba estandarizado al momento de escribir la primera edición de este libro (1978), y que este programa probablemente no compilará en la mayoría de los compiladores modernos a menos que se les indique que acepten el código C90.

Este primer ejemplo en el libro de K&R ahora se considera de mala calidad, en parte porque carece de un tipo de devolución explícito para main() y en parte porque carece de una declaración return. La segunda edición del libro se escribió para el antiguo estándar C89. En C89, el tipo de main sería por defecto int, pero el ejemplo de K&R no devuelve un valor definido al entorno. En C99 y estándares posteriores, se requiere el tipo de devolución, pero es seguro omitir la declaración return de main (y solo main), debido a un caso especial introducido con C99 5.1.2.2.3 — es equivalente a devolver 0, lo que indica éxito.

La forma recomendada y más portátil de main para sistemas alojados es int main (void) cuando el programa no usa ningún argumento de línea de comando, o int main(int argc, char **argv) cuando el programa sí lo hace. utilice los argumentos de la línea de comandos.


C90 §5.1.2.2.3 Terminación del programa

Un retorno desde la llamada inicial a la función main es equivalente a llamar a la función exit con el valor devuelto por la función main como su argumento. Si la función principal ejecuta una devolución que no especifica ningún valor, el estado de finalización devuelto al entorno del host no está definido.

C90 §6.6.6.4 La declaración return

Si se ejecuta una instrucción return sin una expresión, y el valor de la llamada a la función es utilizado por la persona que llama, el comportamiento no está definido. Alcanzar el } que termina una función es equivalente a ejecutar una declaración return sin una expresión.

C99 §5.1.2.2.3 Terminación del programa

Si el tipo de retorno de la función main es un tipo compatible con int, un retorno de la la llamada inicial a la función main es equivalente a llamar a la función exit con el valor devuelto por la función principal como su argumento; llegando al } que termina el La función main devuelve un valor de 0. Si el tipo de devolución no es compatible con int, el el estado de terminación devuelto al entorno del host no está especificado.