O objetivo deste primeiro projeto é criar uma biblioteca totalmente desenvolvida em C e aprender como funcionam as funções mais comuns na programação, envolvendo manipulação de strings, conversões de tipos, listas encadeadas, dentre outras. Essas funções são implementadas do zero, sem o auxílio de bibliotecas externas, sendo exceções apenas o uso do write
(para saída de dados) e o malloc
(para alocamento de memória). E uma vez criada, esta biblioteca será usada nos projetos futuros, uma vez que o auxílio de bibliotecas externas segue proibido como regra.
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_isalpha | isalpha | int ft_isalpha(int c); |
ft_isdigit | isdigit | int ft_isdigit(int c); |
ft_isalnum | isalnum | int ft_isalnum(int c); |
ft_isascii | isascii | int ft_isascii(int c); |
ft_isprint | isprint | int ft_isprint(int c); |
ft_isspace | isspace | int ft_isspace(int c); |
ft_toupper | toupper | int ft_toupper(int c); |
ft_tolower | tolower | int ft_tolower(int c); |
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_strlen | strlen | size_t ft_strlen(const char *src); |
ft_strlcpy | strlcpy | size_t ft_strlcpy(char *dst, const char *src, size_t len); |
ft_strlcat | strlcat | size_t ft_strlcat(char *dst, const char *src, size_t len); |
ft_strchr | strchr | char *ft_strchr(const char *src, int c); |
ft_strrchr | strrchr | char *ft_strrchr(const char *src, int c); |
ft_strncmp | strncmp | int ft_strncmp(const char *stra, const char *strb, size_t n); |
ft_strnstr | - | char *ft_strnstr(const char *big, const char *little, size_t n); |
ft_substr | - | char *ft_substr(char const *s, unsigned int start, size_t len); |
ft_strjoin | - | char *ft_strjoin(char const *s1, char const *s2); |
ft_strtrim | - | char *ft_strtrim(char const *s1, char const *set); |
ft_split | - | char **ft_split(char const *s, char c); |
ft_strmapi | - | char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); |
ft_striteri | - | void ft_striteri(char *s, void (*f)(unsigned int, char*)); |
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_bzero | bzero | void ft_bzero(void *s, size_t n); |
ft_calloc | calloc | void *ft_calloc(size_t nitems, size_t size); |
ft_memset | memset | void *ft_memset(void *src, int c, size_t n); |
ft_memcpy | memcpy | void *ft_memcpy(void *dst, const void *src, size_t n); |
ft_memchr | memchr | void *ft_memchr(const void *src, int c, size_t n); |
ft_memcmp | memcmp | int ft_memcmp(const void *stra, const void *strb, size_t n); |
ft_memmove | memmove | void *ft_memmove(void *dst, const void *src, size_t n); |
ft_strdup | strdup | char *ft_strdup(const char *s1); |
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_atoi | atoi | int ft_atoi(const char *strNum); |
ft_itoa | - | char *ft_itoa(int n); |
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_putchar_fd | - | void ft_putchar_fd(char c, int fd); |
ft_putstr_fd | - | void ft_putstr_fd(char *s, int fd); |
ft_putendl_fd | - | void ft_putendl_fd(char *s, int fd); |
ft_putnbr_fd | - | void ft_putnbr_fd(int n, int fd); |
Implementação | Manual | Protótipo |
---|---|---|
——————— | ————— | —————————————————————————————————— |
ft_lstnew | - | t_list *ft_lstnew(void *content); |
ft_lstadd_front | - | void ft_lstadd_front(t_list **lst, t_list *new); |
ft_lstsize | - | int ft_lstsize(t_list *lst); |
ft_lstlast | - | t_list *ft_lstlast(t_list *lst); |
ft_lstadd_back | - | void ft_lstadd_back(t_list **lst, t_list *new); |
ft_lstdelone | - | void ft_lstdelone(t_list *lst, void (*del)(void *)); |
ft_lstclear | - | void ft_lstclear(t_list **lst, void (*del)(void *)); |
ft_lstiter | - | void ft_lstiter(t_list *lst, void (*f)(void *)); |
ft_lstmap | - | t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); |
No terminal, digite:
make
Para testar a biblioteca, é necessário criar uma main.c
com o cabeçalho #include "libft.h"
e depois compilar com a libft.a
:
cc -Wall -Werror -Wextra -I ./includes -c main.c -o ./objs/main.o
cc -Wall -Werror -Wextra ./objs/main.o libft.a
O formato geral de nomenclatura das páginas de manual no Linux segue a convenção nome(seção)
. A seção do manual indica a categoria à qual o tópico pertence. Seções:
- Seção 1: São os comandos executáveis do usuário (por exemplo, comandos de shell, utilitários do sistema).
- Seção 2: São as chamadas de sistema do kernel.
- Seção 3: São as bibliotecas de funções do C.
- Seção 3p: São as funções de bibliotecas POSIX (Portable Operating System Interface).
- Seção 4: São os arquivos especiais (por exemplo, arquivos de dispositivo).
- Seção 5: São os formatos de arquivo e convenções.
- Seção 7: São as convenções, protocolos e padrões de sistema.
- Seção 8: São os comandos e utilitários do sistema administrativo.