En esta página

Ejercicio 00: ft_putchar

Escribe una función que muestre el carácter recibido como parámetro.

DatoValor
Carpetaex00/
Archivoft_putchar.c
Prototipovoid ft_putchar(char c);
Funciones autorizadassolo write

Hecho con amor para Laura, por Bogdan.

El archivo

#include <unistd.h>

/*
** Escribe un solo caracter en la salida estandar (file descriptor 1).
** Es la unica funcion permitida por el enunciado para mostrar texto.
*/
void    ft_putchar(char c)
{
    write(1, &c, 1);
}

Es la pieza más pequeña del módulo: recibe un carácter y lo manda a la salida estándar. Los otros ocho ejercicios y el Rush 00 escriben con algo equivalente.

Línea por línea

#include <unistd.h>

Una línea que empieza por # no es C normal: es una orden para el preprocesador, un paso previo que copia y pega cosas antes de compilar.

unistd.h es un archivo del sistema que contiene la declaración de write. Es como el índice de un libro: le dice al compilador «existe una función llamada write con estos parámetros». Sin esta línea, el compilador no sabe qué es write y con -Werror el programa ni se genera.

void ft_putchar(char c)

Se lee de izquierda a derecha:

ParteSignificado
voidla función no devuelve ningún valor
ft_putcharel nombre (la ft_ es convención de 42)
(char c)recibe un parámetro llamado c, de tipo char

char guarda un carácter. Cuando alguien llama a ft_putchar('o'), la función recibe una copia de ese carácter en una caja local llamada c. Esa caja existe solo mientras la función se ejecuta.

write(1, &c, 1);

write escribe bytes en un descriptor de archivo. Tiene tres parámetros:

ParámetroValor aquíSignificado
descriptor1la salida estándar: la terminal
buffer&cla dirección donde está guardado el carácter
cantidad1cuántos bytes escribir

& se lee «la dirección de». write no recibe el valor del carácter, recibe dónde leerlo; por eso se pasa &c y no c. Si pasas c, el compilador avisa de un tipo equivocado y -Werror lo convierte en error. La explicación larga está en Paso por valor.

write devuelve cuántos bytes pudo escribir. Aquí se descarta: no hay nada útil que hacer con ese número en una función de una línea.

No hay return

La función es void, así que termina sola al llegar a la llave de cierre. Un return ; final sería correcto pero redundante.

La restricción del enunciado

El archivo contiene únicamente ft_putchar. Ni main, ni funciones auxiliares, ni otros prototipos. Si añades algo, el corrector lo ve y el ejercicio deja de cumplir el subject.

Errores típicos

Mensaje o síntomaCausaSolución
implicit declaration of function 'write'falta #include <unistd.h>añádelo arriba
passing 'char' to parameter of type 'const void *'escribiste write(1, c, 1)usa &c
no imprime nadapasaste 0 como descriptorel primero es 1
undefined reference to 'ft_putchar' al probarno compilaste ft_putchar.cpásalo en el comando

Comprobarlo

cat > /tmp/main.c <<'EOF'
void    ft_putchar(char c);

int main(void)
{
    ft_putchar('o');
    return (0);
}
EOF
cc -Wall -Wextra -Werror ex00/ft_putchar.c /tmp/main.c -o /tmp/ex00
/tmp/ex00

Salida:

o

No hay salto de línea: la función escribe el carácter y nada más. El \n lo pone quien llama.

Descargar

Este archivo es el mismo que usa el Rush 00 en ex00/ft_putchar.c.