ft_printf 2021
va_start
https://jhnyang.tistory.com/293
가변인자 함수의 사용. 함수에 불특정 여러개의 인자를 넘기고 싶을 때 사용 -> 즉 배열이 아니라 여러 인자를 넘길 수 있게 해주겠다는 뜻
#include <stdarg.h>
가변인자 파라미터는 순서 상 가장 마지막에 위치해야한다.
파일의 구조
ft_printf_hex 분석
10진수 분석을 위해서는 하나의 몫과 무하한 나머지가 필요하다.
libft Makefile 분석
구조
1. 표본지정
NAME = libft.a
---주요 파일 위치들
INCLUDES = ../include -> 헤더파일 위치 -> 위치 지정시 슬래쉬는 앞에
SRCS_DIR = src/ -> 소스 되는 파일 들 위치 -> 그냥 폴더는 뒤에 슬래쉬
OBJS_DIR = obj/ -> obj 파일 위치
---컴파일 버전들
CC = gcc -> 컴파일 버전
CFLAGS = -Wall -Werror -Wextra -I -> 컴파일 플래그들
--- 명령어를 위한 키워드들
RM = rm -f
AR = ar rcs
- 커스텀 색깔
DEF_COLOR = \033[0;39m
GRAY = \033[0;90m
RED = \033[0;91m
GREEN = \033[0;92m
YELLOW = \033[0;93m
BLUE = \033[0;94m
MAGENTA = \033[0;95m
CYAN = \033[0;96m
WHITE = \033[0;97m
- src 들
FTIS_DIR = ft_is/
FTIS = ft_isalnum ft_isalpha ft_isascii ft_isdigit ft_isprint
FTMEM_DIR = ft_mem/
FTMEM = ft_bzero ft_calloc ft_memchr ft_memcmp ft_memmove ft_memset
FTPUT_DIR = ft_put/
FTPUT = ft_putchar_fd ft_putendl_fd ft_putnbr_fd ft_putstr_fd
FTTO_DIR = ft_to/
FTTO = ft_atoi ft_itoa ft_tolower ft_toupper
FTSTR_DIR = ft_str/
FTSTR = ft_split ft_strchr ft_strdup ft_striteri ft_strjoin \
ft_strlcat ft_strlcpy ft_strlen ft_strmapi ft_strncmp \
ft_strnstr ft_strrchr ft_strtrim ft_substr
FTLST_DIR = ft_lst/
FTLST = ft_lstadd_back ft_lstadd_front ft_lstclear ft_lstdelone \
ft_lstiter ft_lstlast ft_lstmap ft_lstnew ft_lstsize
SRC_FILES+=$(addprefix $(FTIS_DIR),$(FTIS))
SRC_FILES+=$(addprefix $(FTMEM_DIR),$(FTMEM))
SRC_FILES+=$(addprefix $(FTPUT_DIR),$(FTPUT))
SRC_FILES+=$(addprefix $(FTTO_DIR),$(FTTO))
SRC_FILES+=$(addprefix $(FTSTR_DIR),$(FTSTR))
SRC_FILES+=$(addprefix $(FTLST_DIR),$(FTLST))
SRCS = $(addprefix $(SRCS_DIR), $(addsuffix .c, $(SRC_FILES)))
OBJS = $(addprefix $(OBJS_DIR), $(addsuffix .o, $(SRC_FILES)))
###
OBJSF = .cache_exists
- 명령어들
라이브러리를 만들기 위해서는 .o 파일들이 필요하다.
all: $(NAME)
$(NAME): $(OBJS)
@$(AR) $(NAME) $(OBJS)
@ranlib $(NAME)
@echo "$(GREEN)Libft compiled!$(DEF_COLOR)"
$(OBJS_DIR)%.o : $(SRCS_DIR)%.c | $(OBJSF)
@echo "$(YELLOW)Compiling: $< $(DEF_COLOR)"
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(OBJSF):
@mkdir -p $(OBJS_DIR)
@mkdir -p $(OBJS_DIR)$(FTIS_DIR)
@mkdir -p $(OBJS_DIR)$(FTMEM_DIR)
@mkdir -p $(OBJS_DIR)$(FTPUT_DIR)
@mkdir -p $(OBJS_DIR)$(FTTO_DIR)
@mkdir -p $(OBJS_DIR)$(FTSTR_DIR)
@mkdir -p $(OBJS_DIR)$(FTLST_DIR)
clean:
@$(RM) -rf $(OBJS_DIR)
@$(RM) -f $(OBJSF)
@echo "$(BLUE)libft objects files cleaned!$(DEF_COLOR)"
fclean: clean
@$(RM) -f $(NAME)
@echo "$(CYAN)libft executable files cleaned!$(DEF_COLOR)"
re: fclean all
@echo "$(GREEN)Cleaned and rebuilt everything for libft!$(DEF_COLOR)"
norm:
@norminette $(SRCS) $(INCLUDES) | grep -v Norme -B1 || true
.PHONY: all clean fclean re norm
ranlib : 정적 라이브러리를 성공적으로 사용하기 위해서 일부 시스템, 특히 버클리(Berkeley) 유닉스로부터 파생된 시스템에서는 라이브러리 목차를 만들 필요가 있는데, 이를 위해 ranlib을 사용한다.
별건 없고 일단 ar rcs 수행후에 나온 목적파일을 가지고 ranlib 돌려주면 된다.
중간에 .c | $(OBJSF) 라는 파이프라인 부분이 보인다. 이건 만들어진 파일들을 각 디렉토리로 옮기게 하는 부분이다.
특히 아래쪽에 보면 -p 플레그가 잡히어 있다. 이건 이미 폴더가 있을 경우 실행하지 말라는 명령어인데 이 방식으로 re-link 무제를 해결한 것으로 보인다.
ft_printf 구조
이렇게 구현할 것이다.
이유는 norminette를 만족하기 위해서
Author And Source
이 문제에 관하여(ft_printf 2021), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tonyhan18/ftprintf-2021저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)