O ft_printf é um projeto da 42 School que consiste em recriar a função printf da biblioteca padrão do C. Este projeto tem como objetivo aprofundar o conhecimento sobre:
- Funções variádicas (
va_list,va_start,va_arg,va_end) - Manipulação de strings e formatação
- Conversões de tipos de dados
- Flags e especificadores de formato
- Gerenciamento de memória
- Implementar uma versão funcional do
printf - Gerenciar diferentes tipos de conversão
- Implementar flags de formatação
- Retornar o número de caracteres impressos
- Seguir a norma de código da 42 (Norminette)
A função deve implementar as seguintes conversões:
| Especificador | Tipo | Descrição |
|---|---|---|
%c |
char |
Imprime um único caractere |
%s |
char * |
Imprime uma string |
%p |
void * |
Imprime um endereço de ponteiro em hexadecimal |
%d |
int |
Imprime um número decimal (base 10) |
%i |
int |
Imprime um inteiro em base 10 |
%u |
unsigned int |
Imprime um decimal sem sinal |
%x |
unsigned int |
Imprime um número em hexadecimal (a-f minúsculo) |
%X |
unsigned int |
Imprime um número em hexadecimal (A-F maiúsculo) |
%% |
- | Imprime o símbolo percentual |
# Compilar a biblioteca
make
https://github.com/Solractys/ft_printf
# Compilar com flags de debug
make debug
# Limpar arquivos objeto
make clean
# Limpar tudo (incluindo biblioteca)
make fclean
# Recompilar tudo
make re#include "ft_printf.h"
int main(void)
{
ft_printf("Hello %s!\n", "World");
ft_printf("Number: %d\n", 42);
ft_printf("Hex: %x\n", 255);
ft_printf("Pointer: %p\n", &main);
return (0);
}gcc -Wall -Wextra -Werror main.c libftprintf.a- pft - Testes básicos unitários
- 42TESTERS-PRINTF - Múltiplas flags
- ft_printf_test - Testes gerados aleatoriamente
INT_MINeINT_MAXpara%de%i- Casos com múltiplos zeros na precisão
- Combinações de diferentes flags
- Strings NULL e ponteiros NULL
- Larguras e precisões extremas
#include <stdarg.h>
int ft_printf(const char *format, ...)
{
va_list args;
va_start(args, format); // Inicializar
// ... processar argumentos
char c = va_arg(args, int); // Próximo argumento
va_end(args); // Finalizar
return (chars_printed);
}typedef struct s_print
{
va_list args; // Lista de argumentos
int width; // Largura mínima
int precision; // Precisão
int zero_pad; // Flag '0'
int left_align; // Flag '-'
int total_len; // Comprimento total impresso
} t_print;- ✅ Norminette: Código deve seguir a norma da 42
- ✅ Makefile: Regras obrigatórias implementadas
- ✅ Funcionalidade: Todas as conversões funcionando
- ✅ Valor de Retorno: Número correto de caracteres
- ✅ Gestão de Memória: Sem vazamentos (leaks)
- Programação em C avançada
- Funções variádicas e
stdarg.h - Parsing de strings complexas
- Manipulação de bits e conversões numéricas
- Debugging e testing
- Gestão de projeto e estruturação de código
man 3 printf- Manual da função printf- Variadic Functions in C
- Printf Format Specifiers
[Solractys (csilva-s)] - @Solractys
Projeto desenvolvido como parte do currículo da 42 School
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Feito com ❤️ na 42 School