Libft 과제 시 유의점 (테스터기, protected, Makefile)
·
IT/42Seoul
libft나 다른 하위 서클 함수들은 주로 어떤 정해진 것을 구현하는 문제인 경우가 많다. 따라서 깃허브에 libft 과제를 뮬리넷(42채점 서버)처럼 테스트 할 수 있는 테스터기가 있다. 이 테스터기들을 통해 미처 하지 못한 예외처리나 필수사항의 구현을 체크하여 코드를 보완할 수 있다. 아주 중요하다. * 테스터기 - 내가 주로 쓴 테스터기는 4가지가 있다. 1) Libftest 2) libft-unit-test 3) libft-war-machine 4) libftester 깃허브에 쳐보면 이 외의 더 많은 테스터기들도 다 나온다. 기본적인 사용법은 이렇다. 일단 해당 깃 레포지터리를 깃클론 받는다. 그다음 libft-unit-test와 libftester에서는 그 안의 Makefile에 있는 평가할 ..
malloc/calloc 관련 정리
·
IT/42Seoul
42seoul에서 libft 과제의 동료평가를 진행하다보니, 고수분들께 평가받으며 내가 몰랐던 개념의 허점에 대해 많이 알게 되었다. 그에 대하여 정리하여 스스로 개념을 보완해보려 한다. * malloc : 메모리를 할당 1) 프로토타입 #include void *malloc(size_t size); 2) 인자들 size : 메모리 블록의 크기(바이트 단위) 3) 리턴값 메모리 할당에 성공했을 경우 : 할당한 메모리 블록을 가르키는 포인터를 리턴 (해당 포인터의 타입은 언제나 (void *)형이므로, 사용자가 원하는 타입으로 캐스팅 해줘야 함) 매모리 할당에 실패했을 경우 : 널 포인터를 리턴 주소값을 반환받기 떄문에, 할당된 힙 메모리 영역에 접근하려면 포인터를 사용해야한다. 사용 후 반드시 free(..
[Libft] C 언어 라이브러리 구현_BONUS_보너스 함수 구현2
·
IT/42Seoul
혹시나 문제가 된다면 바로 비공개 처리하겠습니다. 지적이나 댓글 환영합니다! 이번 포스팅에서는 보너스 파트의 함수를 이어서 구현해보았다. 보너스 파트는 연결리스트(랑크드리스트)를 이용한 기본적인 기능을 구현한 함수들을 구현하였다. 이후에도 많이 사용하게 될 것 같다. 참고로, 내가 정의한 libft.h 헤더에는 와 가 include 되어있다. 따라서 libft.h를 호출하면, 따로 정의하지 않고도 에 정의된 size_t 타입과 의 malloc/free를 사용할 수 있다. 또한 에 있는 write 함수 또한 사용할 수 있다. 또한 t_list 구조체도 정의하여, 보너스 함수 구현에 이를 사용하였다. (1) ft_lstdelone : 주어진 노드를 삭제 - 구현 코드 예시 : 1 2 3 4 5 6 7 8 #..
[Libft] C 언어 라이브러리 구현_BONUS_보너스 함수 구현1
·
IT/42Seoul
혹시나 문제가 된다면 바로 비공개 처리하겠습니다. 지적이나 댓글 환영합니다! 이번 포스팅에서는 보너스 파트의 함수를 구현해보았다. 보너스 파트는 연결리스트(랑크드리스트)를 이용한 기본적인 기능을 구현한 함수들을 구현하였다. 이후에도 많이 사용하게 될 것 같다. 참고로, 내가 정의한 libft.h 헤더에는 와 가 include 되어있다. 따라서 libft.h를 호출하면, 따로 정의하지 않고도 에 정의된 size_t 타입과 의 malloc/free를 사용할 수 있다. 또한 에 있는 write 함수 또한 사용할 수 있다. 또한 t_list 구조체가 정의되어 있어 보너스 함수 구현에 이를 사용하였다. * 연결리스트란 무엇인가? 위키 백과의 정의 : 연결 리스트, 링크드 리스트(linked list)는 각 노드가..
Makefile 정리2
·
IT/42Seoul
참고 링크 : https://www.youtube.com/watch?v=jnJL6ppn26Q 의 내용을 요약해서 정리한 내용입니다. * makefile이 필요한 이유 : 파일이 많아질수록 컴파일이 복잡해지기 때문에 1) 반복되는 컴파일 작업이 지겹고 시간이 오래 걸려서 2) 수정된 파일만 컴파일 할 수 있어서 3) 대규모 프로젝트, 공동 프로젝트에서 반드시 필요 * 컴파일 과정 : 소스파일(*.c) -> 목적파일(*.o) -> 실행파일(a.out) (바이너리) - 소스파일: vi, vscode 등의 편집기로 편집. 인간이 이해할 수 있는 프로그래밍 언어 - 목적파일: object 파일, 컴파일러를 통해 번역된 기계어 - 실행파일: 기계어 + 라이브러리를 묶는 "링킹"과정을 거쳐 만들어진 파일 cf) ma..
Makefile 정리1
·
IT/42Seoul
참고 링크 : https://modoocode.com/311 의 내용을 요약 정리해보았습니다. * 컴파일 (compile) : 소스 코드 -> 어셈블리어(컴퓨터가 이해할 수 있는 언어) 성공적으로 컴파일 시, main.o라는 목적 파일(object file)이 생성됨 예제 코드) #include "bar.h" #include "foo.h" int main() { foo(); bar(); } * 링킹 (linking) : 서로 다른 파일에 흩어져 있는 함수나 클래스들을 한데 묶어서 링크해줌, 컴파일러에 object 파일을 전달 위 코드를 컴파일 해도, main.o 외에 foo.o bar.o가 있어야 실제 함수가 작동함 (main.o 에는 foo와 bar의 코드가 없고 함수의 호출만 정의되어 있음) 따라서 ..