20. 함수 포인터
20-1 함수 포인터
프로세스의 형태로 메모리에 저장되면 명령문들은 code segment
에 옮겨 진다.
명령문들도 메모리에 저장되어 있기 때문에 각 명령문마다 주소를 갖는다는 뜻이다.
함수 포인터란?
특정 함수를 구성하는 시작 명령의 위치를 가리키는 포인터 - 함수의 이름 앞에 &를 적으면 함수에 포함되는 첫 번째 명령문의 주소 값을 얻을 수 있다.
함수의 주소 값으로 함수 실행하기 - 이제 이 주소 값을 저장할 수 있는 포인터를 선언함수 원형
을 사용 - 원형을 알아야 함수를 호출할 때 스택 프레임을 구성할 수 있다.
20-2 함수 그룹
원형이 같은 함수들을 묶기
같은 형식이란 같은 수의 매개변수와 자료형 그리고 같은 형태의 반환값을 같는 함수를 말한다.
이 함수들은 함수 이름만 다를 뿐 함수의 원형은 모두 같아서 함수의 포인터를 선언하면 이 함수들의 주소값을 저장해서 사용할 수 있다.
배열을 사용하여 연속한 메모리에 배열하고,
반복문을 사용하여 코드를 단순화시킨 후, 차례대로 원하는 함수의 실행을 배열에 저장할 수 있다.
20-3 콜백 함수
컴파일하여 라이브러리 형식 (*.lib
)의 파일로 제공 - 헤더 파일 (*.h
)에 함수의 원형을 적어서 함께 제공
사용자들이 이 라이브러리를 사용할 수 있다.
하지만, 사용자가 요구하는 것에 따라 매번 함수를 추가, 수정하기도 힘들고, 소스 파일을 주기도 싫다.
이럴 경우, 사용자가 스스로 함수의 기능을 일부 수정할 수 있도록 해 주는 것이 좋다.
라이브러리 제작자가 원형에 더해, 이 함수를 사용자가 확장할 수 있도록 선택권을 줄 수 있다.
있는 그대로 사용하고자 NULL 값을 매개 변수에 전달하면 원형 그대로 사용할 수도 있다.#pragma
전처리기를 사용 - 컴파일러의 여러 가지 설정 값을 수정할 수 있다.
이런 식으로 자신이 사용할 함수가 명시적으로 호출되지 않고 함수 포인터에 의해서 호출되는 방식을 암시적 호출, 즉 Callback
이라고 한다.
'Programming Language > Do it! C언어' 카테고리의 다른 글
[Do it! C언어 입문] 부록 (0) | 2022.11.11 |
---|---|
[Do it! C언어 입문] 19장. 파일 입출력 (0) | 2022.11.11 |
[Do it! C언어 입문] 18장. 구조체와 연결 리스트 (0) | 2022.11.11 |
[Do it! C언어 입문] 17장. 다차원 포인터 (0) | 2022.11.11 |
[Do it! C언어 입문] 16장. 메모리 할당 (0) | 2022.11.11 |