En esta página
Ejercicio 00: ft_putchar
Escribe una función que muestre el carácter recibido como parámetro.
| Dato | Valor |
|---|---|
| Carpeta | ex00/ |
| Archivo | ft_putchar.c |
| Prototipo | void ft_putchar(char c); |
| Funciones autorizadas | solo 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:
| Parte | Significado |
|---|---|
void | la función no devuelve ningún valor |
ft_putchar | el 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ámetro | Valor aquí | Significado |
|---|---|---|
| descriptor | 1 | la salida estándar: la terminal |
| buffer | &c | la dirección donde está guardado el carácter |
| cantidad | 1 | cuá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íntoma | Causa | Solució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 nada | pasaste 0 como descriptor | el primero es 1 |
undefined reference to 'ft_putchar' al probar | no compilaste ft_putchar.c | pá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.