Search
Duplicate

20201224(목)

내용
42) 라이브러리에 대한 이해
공부장소
2021/03/20 18:22
라이브러리에 대한 이해
첫 과제로 라이브러리를 만드는 것이 나왔다. 스터디원들과 스터디를 진행하다가 라이브러리를 만드는 목적에 대해 이야기를 해보게 되었다. 단순히 목적에 맞는 코드를 작성하는 것이 아니라 라이브러리를 만드는 이유에 대해 생각해 보았다. 라이브러리는 이후 코드를 작성할 때 사용성이 편리하고 중복되는 부분이 적어야 한다. 그래서 모든 코드를 따로따로 구현하다가 이미 구현된 부분은 내가 작성해 둔 라이브러리를 가져오면 된다고 생각하였다.
예를들어 아래 함수들은 오른쪽의 함수들과 연관이 있다.
memset -> bzero -> calloc
strncpy -> substr -> split
memcmp -> strnstr
strchr -> strtrim
아래 두개의 함수를 합치면 또 뒤의 함수를 만들 수 있다.
isalpha + isdigit → isalnum
int isalnum(int c) { if (isdigit(c) || isalpha(c)) return (1); return (0); }
C
복사
이처럼 기존에 만들어 둔 라이브러리를 활용해 중복된 코드를 최소화 할 수 있다.
strncmp와 memcmp의 차이
strncmp와 memcmp는 겉으로 보기에는 같은 역할을 하지만 자세히 살펴보면 큰 차이를 가지고 있다.
strncmp
int ft_strncmp(const char *s1, const char *s2, size_t n) { while (*s1 && *s2 && n && (*s1 == *s2)) { ++s1; ++s2; --n; } if (n == 0) return (0); return (*(unsigned char *)s1 - *(unsigned char *)s2); }
C
복사
memcmp
int ft_memcmp(const void* ptr1, const void* ptr2, size_t size) { size_t i; i = -1; while (++i < size && (*((unsigned char*)ptr1 + i) == *((unsigned char*)ptr2 + i))) ; return (*((unsigned char*)ptr1 + i) - *((unsigned char*)ptr2 + i)); }
C
복사
strcmp는 문자열을 비교하기 때문에 중간에 '\n'값이 나오면 size가 남아 있더라도 값을 리턴한다. memcmp는 메모리공간을 비교하는 것이기 때문에 '\n'값이 나오더라도 비교하는 두 메모리공간의 값이 같다면 루프가 size만큼 돌때까지 계속 진행하게 된다.
따라서 이처럼 문자열을 비교하는 함수와 메모리를 비교하는 함수는 '\n'값 처리에 대해서 차이가 있을 수 있다는 것을 알 수 있다.