저번 시간에 함수 포인터에 대해서 언급을 했고, clockwise 해석법에 대해서도 간단하게 언급을 했으니, 다소 복잡한 것을 해석해 보도록 하겠습니다. C언어에는 signal 함수가 있는데요. 이것의 선언부만 간단하게 해석해 보도록 하겠습니다. 간단해 보이진 않지만요. 사실 원래는, void (*signal(int,void (*)(int)))(int); 입니다. 먼저, keyword를 찾아봅시다. signal입니다. 그리고 큰 덩어리 하나 찾아봅시다. signal에서 시계 방향으로 돌기 시작했을 때 맨 먼저 만나는 '('과 쌍을 이루는 ')'을 찾아서, 표시를 해 주었는데요. 이 부분은 안쪽에서 해석을 해 보도록 하겠습니다. 먼저, keyword인 signal에서, 오른쪽을 먼저 보니까 ()이 보였습니..
함수포인터 검색 결과
포인터를 배우시면, 가장 머리가 아픈 부분이 함수 포인터일 겁니다. 교재에서는 아마 signal이랑, qsort를 예제로 많이 들 거에요. 사실 signal은 잘 안 쓰지만요. qsort는 비교체를 넘겨줄 때 함수 포인터를 넘겨주고요. 그런데, 이것이 대체 무엇을 하는 것일까요? 어떻게 실행되는지, 자세하게 분석을 하는 것은 아마도, 어셈블리랑 같이 하면서 이야기를 할 듯 싶어요. 오늘은 예제 코드만 간단하게 이해해 보도록 하겠습니다. 17줄짜리 프로그램입니다. func라는 변수를 선언했는데요. 이것이 무엇인지만 안다면, 끝난다고 보셔도 될 듯 싶습니다. 먼저, 6번째 줄에서, void (*func)() = foo; 라고 되어 있습니다. 선언부만 잘 보시면 되는데요. 시계 방향으로 해석하겠습니다. 먼저 ..
알고리즘에, 정렬 시리즈를 계속 올리고 있습니다. C언어에서도, 손쉽게 빠른 정렬을 쓸 수 있는데요. 에 빠른 정렬을 하는 qsort 함수가 있습니다. 이것의 원형은 다음과 같습니다. void qsort(void *base, size_t num, size_t size, int (*compare)(const void *,const void *)); 뭔가 원형이 복잡해 보이는데요. 특히 4번째 인자가 조금 복잡해 보입니다. 이게 무엇인지 천천히 해석해 보겠습니다. 먼저 identifier를 찾을 건데요. compare입니다. 오른쪽부터 볼 건데요. (나 )를 만날 때 까지 읽어요. compare 뒤에 바로 )가 있으니까, 왼쪽을 봅니다. 보는데 *가 있네요. 즉, compare is pointer라는 겁니다..
최근댓글