C 언어 문법에 관한 질문
글쓴이: khk / 작성시간: 목, 2003/07/24 - 1:52오후
dl library 사용에 대해 man 페이지에 보면 다음과 같은 예제가 있습니다.
1 #include <stdio.h> 2 #include <dlfcn.h> 3 4 int main(int argc, char **argv) { 5 void *handle; 6 double (*cosine)(double); 7 char *error; 8 9 handle = dlopen ("/lib/libm.so.6", RTLD_LAZY); 10 if (!handle) { 11 fputs (dlerror(), stderr); 12 exit(1); 13 } 14 15 cosine = dlsym(handle, "cos"); 16 if ((error = dlerror()) != NULL) { 17 fputs(error, stderr); 18 exit(1); 19 } 20 21 printf ("%f\n", (*cosine)(2.0)); 22 dlclose(handle); 23 24 exit(0); 25 }
C언어 문법에 관련된 문제인데요...
6번 라인 double (*cosine)(double); -> 문법이 이해가 잘 안됩니다. ㅜ.-;
15번 라인 cosine은 6번에서 선언한 double형 변수인가 ??
21번 라인 (*cosine)(2.0)은 /lib/libm.so.6에 있는 function ?? 이 또한 문법이 이해가 잘 안되네요...
답변 부탁드립니다.
Forums:
함수 포인터입니다.double sine(double);이건
함수 포인터입니다.
double sine(double);
이건 double 형을 받아 double 형을 돌려주는 함수 sine이죠? 이 함수에 대한 포인터형를 선언한다면...
double (*cosine)(double);
이 되죠.
shared object(window의 dl과 유사)를 사용하시고자 하는
shared object(window의 dl과 유사)를 사용하시고자 하는군요. 이를 사용하는 방법중에서도 ActiveX와 유사한 동적링크를 사용하려고 하시네요.
동적 라이브러리 파일을 오픈
dlsym()은 위에서 오픈된 라이브러리 파일내의 라이브러리 함수중 함수명이
cos인 것의 주소를 가져온다(함수 포인터) 이때, 가져올 함수(cos)의 리턴 타입
은 double형이므로 이를 받을 함수 포인터 변수는 double형을 가지며
파라메터도 double형 1개를 가지는 함수포인터 형이어야 한다.
이를 선언한 줄이 6번째 줄이다.
함수 포인터를 알고 있으므로, 해당 함수를 호출한다.
님같은 경우 아마도 함수 포인터를 사용하는 방법이 더 문제인듯합니다.
다음 예제가 보탬이 될지 아니면, 헷갈림이 될지 모르겠네요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
웹검색해보면
http://www.function-pointer.org/
예제도 좀 있는것같네요. 이런 이름의 URL이 있었다니... ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
댓글 달기