Summary
이 프로젝트는 C 라이브러리를 코딩하는 것입니다. 여기에는 프로그램에 의존할 많은 범용 기능이 포함되어 있습니다.
Introduction
C 프로그래밍은 매우 유용한 표준 함수에 접근할 수 없을 때 매우 지루할 수 있습니다. 이 프로젝트를 통해 해당 기능을 다시 작성하고 이해하며 사용법을 배울 수 있습니다. 이 도서관이 앞으로의 모든 C 프로젝트를 도와줄 것입니다. 1년 내내 시간을 내서 당신의 libft
를 확장하세요. 그러나 항상 어떤 기능이 허용되는지 확인해야 합니다!
Common Instructions
- 당신의 프로젝트는 반드시 C로 작성되어야 합니다.
- 당신의 프로젝트는 Norm에 따라 작성되어야 합니다. 보너스 파일/함수가 있는 경우 해당 파일/함수가 Norm 검사에 포함되며 내부에 Norm 오류가 있으면 0을 받게 됩니다.
- 정의되지 않은 동작과 별도로 함수가 예기치 않게 종료되어서는 안 됩니다(segmentation fault, bus error, double free 등). 이렇게 되면 당신의 프로젝트는 작동하지 않는 것으로 간주되며 평가 중에 0점을 받습니다.
- 필요한 경우 할당된 모든 힙 메모리 공간을 적절하게 확보해야 합니다. Leak는 용납되지 않습니다.
- 제목에 필요한 경우 원본 파일을 필요한 출력으로 컴파일할 Makefile을 제출해야 합니다. 플래그가
-Wall
,-Wextra
및-Werror
인 경우 cc를 사용하고 Makefile을 다시 링크하지 마십시오. - Makefile에는 적어도
$(NAME)
,all
,clean
,fclean
및re
규칙이 포함되어야 합니다. - 프로젝트에 보너스를 제출하려면 Makefile에 규칙 보너스를 포함해야 합니다. 이 규칙 보너스는 프로젝트의 주요 부분에서 금지된 모든 다양한 헤더, 라이브러리 또는 함수를 추가합니다. 보너스는 다른 파일
_bonus
에 있어야 합니다.제목에 다른 내용이 지정되지 않은 경우{c/h}
을(를) 선택합니다. 필수 및 보너스 부분 평가는 별도로 진행됩니다. - 프로젝트에서 libft를 사용할 수 있는 경우 해당 소스 및 연결된 Makefile을 연결된 Makefile과 libft 폴더에 복사해야 합니다. 프로젝트의 Makefile은 Makefile을 사용하여 라이브러리를 컴파일한 다음 프로젝트를 컴파일해야 합니다.
- 테스트 프로그램은 제출하지 않아도 되고 채점이 되지 않지만 귀하의 프로젝트를 위해서 만들 것을 권장합니다. 그것은 당신의 작업과 동료들의 작업을 쉽게 테스트할 수 있는 기회를 줄 것입니다. defense동안 그 테스트들이 특히 유용하다는 것을 알게 될 것입니다. 실제로 defense하는 동안, 당신은 당신의 테스트 또는 당신이 평가하는 동료의 테스트를 자유롭게 사용할 수 있습니다.
- 할당된 git 저장소에 작업을 제출합니다. 깃 저장소의 작업만 등급이 매겨집니다. Deepthought가 당신의 작품을 채점하도록 지정되면, 동료 평가 후에 작업이 완료됩니다. Deepthought의 평가 작업 중에 작업 부분에서 오류가 발생하면 평가가 중단됩니다.
Mandatory part
Technical considerations
- 전역 변수를 선언하는 것은 금지되어 있습니다.
- 보다 복잡한 기능을 분할하기 위해 helper function이 필요한 경우 정적 함수로 정의합니다. 이렇게 하면 해당 함수의 범위가 해당 파일로 제한됩니다.
- 모든 파일을 리포지토리의 루트에 배치합니다.
- 사용하지 않는 파일을 제출하는 것은 금지되어 있습니다.
- 모든 .c 파일은 -Wall -Wextra -Werror 플래그를 사용하여 컴파일해야 합니다.
- 라이브러리를 만들려면 명령어를 사용해야 합니다. libtool 명령은 사용할 수 없습니다.
- libft.a는 리포지토리의 루트에 생성되어야 합니다.
Libc functions
이 첫 번째 파트에서는 man에 정의된 대로 libc 함수 집합을 다시 코드화해야 합니다. 당신의 함수는 원본과 동일한 프로토타입과 동작을 보여줘야 합니다. 함수 이름 앞에는 “ft_“가 와야 합니다. 예를 들어 stren은 ft_stren이 됩니다.
- isalpha
- isdigit
- isalnum
- isascii
- isprint
- strlen
- memset
- bzero
- memcpy
- memmove
- strlcpy
- strlcat
- toupper
- tolower
- strchr
- strrchr
- strncmp
- memchr
- memcmp
- strnstr
- atoi
- calloc
- strdup
Additional functions
이 두 번째 파트에서는 libc에 없거나, 그것의 일부이지만 다른 형태의 함수 들을 개발해야 한다.
- ft_substr
- ft_strjoin
- ft_strtrim
- ft_split
- ft_itoa
- ft_strmapi
- ft_striteri
- ft_putchar_fd
- ft_putstr_fd
- ft_putendl_fd
- ft_putnbr_fd
Bonus part
필수 부분을 완료했다면 주저하지 말고 이 추가 부분을 더 진행하세요. 성공적으로 통과되면 보너스 점수를 얻을 수 있습니다. 메모리와 문자열을 조작하는 기능은 매우 유용합니다. 그러나 리스트를 조작하는 것이 훨씬 더 유용하다는 것을 곧 알게 될 것이다. 목록의 노드를 나타내려면 다음 구조체를 사용해야 합니다. libft.h 파일에 아래의 선언을 추가합니다.
1
2
3
4
5
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list
t_list 구조체의 멤버는 다음과 같다:
- content
노드에 포함된 데이터.
void *를 사용하면 모든 종류의 데이터를 저장할 수 있습니다. - next
다음 노드의 주소.
다음 노드가 마지막 노드인 경우 NULL.
Makefile에서 보너스 함수를 libft.a에 추가할 make bonus 규칙을 추가합니다.
목록을 쉽게 사용할 수 있도록 다음 기능을 구현하십시오.
- ft_lstnew
- ft_lstadd_front
- ft_lstsize
- ft_lstlast
- ft_lstadd_back
- ft_lstdelone
- ft_lstclear
- ft_lstiter
- ft_lstmap