반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SQLite
- 포인터변수
- Preprocessor
- Golang
- 약어
- 한빛미디어
- getopts
- Symbol
- Programming
- DBMS
- FreeBSD
- 컴퓨터 강좌
- UNIX
- 포인터
- 전처리기
- 구조와 원리
- Pointer
- TiKV
- newSQL
- DBMS 개발
- 함수포인터
- UNIX Internals
- 커널
- TiDB
- OS 커널
- go
- Windows via c/c++
- 긴옵션
- kernel
- bash
Archives
- Today
- Total
sonumb
C Pointer - Extra 본문
이번 포인터는 보너스이다.
쪼금은 난해하다.
따라올려면 와도괜찮다.
함수 포인터를 인자로 받고 함수 포인터를 반환하는 함수: p
아 이게 무슨 마른 운영체제에 세그먼트폴트같은 소리인가.
예를 보자.
void (*signal(int signo, void (*func)(int) ))( int );위의 함수는 유닉스의 시그널 함수라는 것이다.
시그널함수는 일종의 콜백함수이다..즉 어떤일을 동적으로 처리해달라는 거다.
설명은 그정도로만 하고 ,
위의 함수는 조금 `거시기`하다. 일반적으로 return funtion_name( parameter ); 의 문법과는 도통 매치가 되지 않는다. 왜냐하면... 그렇게 만들었기 때문이다. 문법을 만든 Geeks 두분의 생각일 뿐이다.-_-;
하지만!!! 알아보기 좋도록 간단하게 만들어볼 수 있다..
typedef void FUNCTION( int );이러면 좀 쉽다.
FUNCTION* signal( int signo, FUNCTION* func);
혹은
typedef void (*PFUNCTION)( int );
PFUNCTION signal( int signo, PFUNCTION func);
알아보기 좋도록 곱게곱게 고쳤다.
말그대로 함수포인터를 parmeter로 받고 함수포인터를 리턴한다.
더이상 쉽게 설명 불가하다. -_-;
extra의 extra:
밑의 쓰레기 코드를 함 보자!
char ( *func( char *(*strf[9])(void)) ) ( unsigned (**)(const char *) );
의문이 들것이다. `이거 해석가능한거임?`
해석은 가능하다.
Return value : char (*) ( unsigned (**)(const char *) )
즉 함수포인터를 리턴한다. unsigned를 리턴하고 const char*를 인자로 받는 함수 대한 함수이중포인터(이쯤되도 짜증이 난다)를 인자로 받고 char를 리턴하는 함수의 포인터 말이다. -_-;
이거 해석하는데 짜증난다.
Parameter : char *(*strf[9])(void)
포인터 배열이다. 그것도 함수포인터 배열이다.
char*를 리턴하고 인자가 없는 함수 말이다.
위에것 해석하는데도 짜증나는데 짜증이 배가 된다.
위의 함수 프로토타입은 쓰레기 코드다 . 말그대로. 천지 써먹을데 없으니 저런거에 모른다고 열받아 할 필요없다. (참고로 내가 이상한 놈이라서 그런다. -_-; )
하지만 고급프로그램을 짜고싶다면 위의 signal 함수의 원형정도는 해석할 줄 알아야겠다.
여담으로 컴파일러를 공부하고 나면 위의 코드를 해석하는데 도움이 많이 될 것이다.
(`LR파서`의 특징을 살펴봐라.)
반응형