아는 사람은 알겠지만, 서울42에는 함수 당 25줄의 제한이 붙어있다. 프로젝트를 진행하면서 느낀건, if문과 while문의 을 쓰면 너무 많은 줄 수가 빠진다는걸 느꼈다.
그래서 이걸 재귀로 바꾸려고 시도했다.
구 코드는 이러하다.
if (!(*head))
{
if(!((*head) = malloc(sizeof(t_manager))))
return (-1);
}
else
{
while ((*head))
{
if ((*head)->fd == fd)
{
(*head)->buffer = *buffer;
return (1);
}
(*head) = (*head)->next;
}
if(!((*head) = malloc(sizeof(t_manager))))
return (-1);
}
(*head)->next = NULL;
(*head)->fd = fd;
(*head)->buffer = *buffer;
return (1);
여기서 더 줄이려고 해봐도, while문과 if문의 중괄호로 빠지는 줄때문에 더 이상 줄일수가 없었다. 오늘 이를 고치려고 했고, 재귀문으로 변경하였다.
if (!(*head))
{
if(!((*head) = malloc(sizeof(t_manager))))
return (-1);
(*head)->fd = fd;
(*head)->next = NULL;
(*head)->buffer = *buffer;
return (1);
}
if ((*head)->fd ==fd)
{
(*head)->buffer = *buffer;
return (1);
}
return (gnl_push_buffer(fd, &((*head)->next), buffer));
확실히 줄었다!!! 처리 부분에서 어느정도 문제가 발생하긴 하지만, 그것은 수정하면 되는 일이고, 그렇게 뚱뚱하던 함수를 줄였다는 사실이 다행이라고 생각한다.