크래프톤 정글5기 22DAY c언어와 친해지기
대충 구현된 레파지토리
c언어와 친해지기
당장 다음주부터 c로 무언가 코드를 짜야한다는 소리를 듣고 c언어의 모듈화에 대해 알아보았다.
클래스가 없는 c언어의 특성상 제대로된 작업을 진행하기 위해서는 헤더파일을 만들고, 이후 그 헤더파일에 대한 구현을 담으면 좀 더 정리가 된다.
헤더 만들시 유의사항
우선 .h
에는 함수를 정의하는 용도로 사용하고, 이에 대한 구현부는 소스파일인 .c
에 구현하도록 한다.
또한 소스파일과 헤더파일명은 일치해야지 이후 링커가 제대로 이 둘을 연결시켜줄 수 있다.
까다로웠던 함수
erase함수
void erase(int* itr,vector* v) {
if (v->size == 0)return NULL;
else {
int* target = itr;
int* end = &(v->data[v->size - 1]);
// 삭제할 요소 다음 요소들을 한 칸씩 앞으로 이동
while (target < end) {
*target = *(target + 1);
target++;
}
v->size--; // 벡터의 크기를 하나 줄임
}
}
이 함수는 gpt의 도움을 조금 받았는데, 처음에는 size–만 생각했다가 그러면 이터레이터를 통해서 어떻게 삭제할 인덱스에 접근할 것인지 고민에 빠졌다.
굉장히 간단한 아이디어였는데, 삭제할 요소의 인덱스 값을 우리가 가지고 있으니 이 요소의 앞은 그대로 두고 뒷 요소들만 한 칸씩 인덱스를 이동시키면 되는 것이었다.
clear함수
void clear(vector*v) {
free(v);
v->data == NULL;
v->size = 0;
}
방심하다 실수한 문제
data와 size는 초기화 해주었으나, 이후 코드를 읽다보니 malloc으로 계산해놓은 메모리를 해제하지 않은 실수를 발견하였다.
empty함수
bool empty(const vector* v) {
if (v->size == 0)return true;
else
return false;
}
n년만에 c언어를 하다보니 헤더명을 까먹고 로드 안해서 한참 헤맸다.
c언어에서는 bool을 쓰기 위해서 #include <stdbool.h>
헤더를 불러와야한다.
댓글남기기