뇌 마음 반반저장소

[42_libft] 시작하며 본문

42/libft

[42_libft] 시작하며

맹진저 2022. 11. 27. 19:51
728x90

 나는 현재 1 서클을 마친 상태에서 so_long 프로젝트를 하고 있던 중이다. 그런데 아무리 노력해도 코드를 스스로 쓸 수 없고 제대로 이해를 하며 프로젝트를 하고 있다는 생각이 들지 않았다. 그래서 1주일 간의 고민 끝에 잠시 학교 생활을 멈추고 처음부터 제대로 내가 코드를 작성해 봐야겠다는 결정을 내렸다. 

 

Libft는 아주 기초적인 코드들로 이루어져 있는데(앞으로 할 과제 중에 가장 쉬운 듯..), 내가 후회 하는 점은 메인을 스스로 쓰지 않고 코드를 작성하고 테스터로 테스팅하고 넘어간 점이다. 그리고 후반부에 등장하는 struct와 fd에 대해서 자세하게 기록하고 공부해보고자 한다. 또한 헤더 파일과 Makefile이 주구장창 쓰이기 때문에 이것도 제대로 짚고 넘어가야 할 것 같다. (참고로 필자는 정말 코딩에 기본지식이 없기 때문에 굉장히 자세하게 기록 할 예정이다.)

 

Chapter I

<Introduction>

C programming can be very tedious when one doesn’t have access to the highly useful standard functions. This project is about understanding the way these functions work, implementing and learning to use them. Your will create your own library. It will be helpful since you will use it in your next C school assignments.
Take the time to expand your libft throughout the year. However, when working on a new project, don’t forget to ensure the functions used in your library are allowed in the project guidelines.

완전 유용한 표준적 함수들에 접근할 수 없다면 C 프로그래밍은 아주 지루할 수 있어. 이 프로젝트는 이런 함수들이 어떤 방식으로 일을 하는지, 어떻게 적용이 되는지, 어떻게 그들을 사용하는지 이해해하는 거야. 너는 너만의 라이브러리를 만들 거고, 얘는 너가 학교에서 C 과제를 하는동안 아주 유용하게 쓰일 거야.

시간을 내서 1년 내내 너의 libft 라이브러리를 확장해봐. 하지만, 새로운 프로젝트를 작업할 때, 프로젝트 가이드 라인에 너의 라이브러리가 사용해도 되는 함수인지 확인하고 사용해야 한다!

Chapter II

<Common Instructions>

• Your project must be written in C.

꼭 C로 작성해라.


• Your project must be written in accordance with the Norm. If you have bonus files/functions, they are included in the norm check and you will receive a 0 if there is a norm error inside.

너의 프로젝트는 Norm을 따라서 작성되야해. 만약 보너스도 한다? 얘도 Norm체크 해야되. Norm오류다? 바로 0점이다.

더보기

Norminette 체크 잘 할 것 ㅜㅜ.. xcode에 Extensions에 42를 치면 노미넷 프로그램 다운 가능! 그러면 계속 고치면서 코딩할 수 있음.


• Your functions should not quit unexpectedly (segmentation fault, bus error, double free, etc) apart from undefined behaviors. If this happens, your project will be considered non functional and will receive a 0 during the evaluation.

함수는 확실하지 않은 양식을 제외한 "세그 폴트, 버스에러, 더블프리 등등"의 예기치 못한 오류로 끝나면 안 됨. 만약 그렇다? 너의 프로젝트는 "기능 없음"으로 체크돼서 평가에서 0점을 받는다.


• All heap allocated memory space must be properly freed when necessary. No leaks will be tolerated.

모든 힙 영역의 메모리는 무조건 free를 시켜라. 메모리 누수는 허용되지 않는다. 알았냐.


• If the subject requires it, you must submit a Makefile which will compile your source files to the required output with the flags -Wall, -Wextra and -Werror, use cc, and your Makefile must not relink.

만약 Makefile 제출하라고 하면 제출해라. (소스파일을 컴파일 할 때 -Wall -Wextra -Werror, cc를 사용해야 되고, Makefile은 relink 되지 않게 해라..)

👇Makefile relink에 대하여👇

 

• Your Makefile must at least contain the rules $(NAME), all, clean, fclean and re.

Makefile에는 $(NAME), all, clean, fclean 그리고 re가 항상 포함되야 한다.


• To turn in bonuses to your project, you must include a rule bonus to your Makefile, which will add all the various headers, librairies or functions that are forbidden on the main part of the project. Bonuses must be in a different file _bonus.{c/h} if the subject does not specify anything else. Mandatory and bonus part evaluation is done separately.

보너스들을 제출하고 싶다? 보너스 룰에 따라 Makefile, 보너스에 명시된 여러 헤더들을 모두 추가해야하고, 메인 파트에서 금지된 라이브러리 또는 함수를 사용해서는 안된다. 보너스는 주제에서 특별히 다루지 않는 이상  항.시. 따로 보너스 파일로 저장해야 한다. 필수 파트와 보너스 파트는 따로 평가된다.


• If your project allows you to use your libft, you must copy its sources and its associated Makefile in a libft folder with its associated Makefile. Your project’s Makefile must compile the library by using its Makefile, then compile the project.

만약 프로젝트가 너의 libft 사용을 허용한다? 너는 libft 원본과 libft Makefile을 본 Makefile에 종속해서 폴더로 복사해야 한다. 니 프로젝트의 Makefile은 반드시 Makefile을 사용해서 라이브러리를 컴파일 한 다음 프로젝트를 컴파일해야 한다.

👇추가 해설👇

더보기

 -> 어떤 프로젝트에서든 libft를 사용할 수 있게 되는데, 그때 본 프로젝트의 Makefile에 컴파일될 수 있게 설정하라는 뜻이다.

예를 들어 ft_printf라는 프로젝트에 libft를 사용하고 싶다면,

1. 일단 libft폴더를 통째로 넣고

2. ft_printf의 Makefile에서 libft가 컴파일하고

3. libft폴더 안의 Makefile이 또 돌아가서 컴파일하라는 뜻이다.

 우리의 libft과제는 다른 과제를 원활히 수행하기 위한 라이브러리가 되는 것이다!

라이브러리, library
명사 [컴퓨터]
 컴퓨터에 즉시 사용할 수 있도록 자기 테이프 내에 정리 기록한 정보 집단.

그러니 우리가 만드는 이 라이브러리는 항상 우리가 필요할 때 꺼내 쓸 수 있도록 도구를 만드는 과제이다.

라이브러리를 찾아보다가 헤더와 라이브러리의 차이가 궁금해졌다. 헤더도 위에 선언만 해주면서 그 헤더 안에 있는 모든 목록을 사용할 수 있기 때문이다.

 프로그래밍 언어에서, 헤더 파일(header file) 또는 인클루드 파일(include file)컴파일러에 의해 다른 소스 파일에 자동으로 포함된 소스 코드의 파일이다. - 위키백과, 우리 모두의 백과사전

헤더 파일은

1. 우리가 만드는 libft 라이브러리처럼 #include를 통해 이미 누군가 정해 만들어 놓은 함수를 포함,

2. #define을 통해서 코드 전체에 정의 내려지는 데이터를 포함,

3. 코드 전체에 사용된 모든 함수들의 이름을 포함해서

편리하게 왔다 갔다 할 수 있는 책 맨 앞장의 목차 같은 것이다.

 

라이브러리 파일의 자세한 설명은 아래의 링크로 가면 있다. 아래의 링크 설명을 간략하게 적어보면 라이브러리 파일은 코드 재사용을 위해 조직화된 오래된 기법 중의 하나라고 한다. 라이브러리 파일은 대개 .o파일로 존재하면서 사용해야 한다. 그러니 우리의 libft폴더도 Makefile이 오브젝트 파일로 변경해 줘서 사용할 수 있다는 것!

 

아래 블로그 설명에는 정적 라이브러리 (Static Library: libft같이 실행파일 하나만으로 보완이 되니 편리~ *.a 파일 확장자로 묶어줌), 공유/동적 라이브러리 (Linking/Dynamic Library: libft처럼 다 컴파일하지 않고 필요한 파일만 컴파일해서 실행하고 또 메모리도 삭제시켜주는 효율적인 친구~ *.so 파일 확장자로 묶어줌)를 자세하게 장단점을 나눠 설명하고 있다.

헤더와 라이브러리 비교

 

• We encourage you to create test programs for your project even though this work won’t have to be submitted and won’t be graded. It will give you a chance to easily test your work and your peers’ work. You will find those tests especially useful during your defence. Indeed, during defence, you are free to use your tests and/or the tests of the peer you are evaluating.

우리는 당신이 스스로 테스트 프로그램을 만들기를 권장한다. 테스트를 제출할 필요도 없고~ 점수에는 전혀 반영이 되지 않더라도~ 말이지. 이건 니 스스로 뿐만 아니라 평가자와의 테스트에도 자신의 코드를 쉽게 테스트해볼 기회란 말이다. 넌 이 테스트들이 "특히" 네가 방어할 때 아주 유용하게 사용되고 있는 걸 발견할 걸? 실제 방어 동안에, 넌 자유롭게 너의 테스터나 또는 평가자의 테스트를 사용할 수 있다.

더보기

 -> 메인(main.c)을 만들어 보지 않은 자의 후회. 나중에 계속 테스트하며 나의 코드를 발전시킬 텐데 테스터에 의존하면 나의 코드가 어떻게 시궁창으로 빠지고 있는지 계속 확인할 수가 없다. 메인과 싸울지라도 꼭, 꼭, 꼭, 스스로의 테스터를 만들어 볼 것! 생각의 회로가 바뀐다...!


• Submit your work to your assigned git repository. Only the work in the git repository will be graded. If Deepthought is assigned to grade your work, it will be done after your peer evaluations. If an error happens in any section of your work during Deepthought’s grading, the evaluation will stop.

깃 헙에 작업 잘 밀어 넣어라. 깃에만 있는 걸로 점수 준다. Deepthought이 너의 작업을 평가한다? 그러면 동료평가 후에 해준다. 만약에 Deepthought이 오류 났다고 한다? 그럼 너의 평가는 그대로 멈춘다.

 

 

 

영어로 된 프로젝트 문제지(?)를 받으면 항상 짜증이 났다. 역시 한국어와 외국어를 할 때 이런 스트레스와 어려움이 있는 것 같다. 하지만 어쩌겠나.. 이제 익숙해져야지!

 

자.. 이제 그럼 Makefile, 헤더 파일 만들러 가볼까나🎵

 

 

 

저에게 도움 주고 싶은 내용이나

틀린 내용이 있다면 댓글로 남겨주시고,

도움이 되었다면 공감 한 번씩 눌러주세요👍❤️

728x90
Comments