C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[9501] Re:[질문] F8키(step over)컴파일과 함수포인터 사용법에대해... <- 함수 포인터 변수입니다...
김민호 [xho95] 1455 읽음    2001-08-01 08:12
안녕하세요...

-----------------------------------------------------
1. 함수 포인터에 대한 내용...

^^... 사실 알고 보면 아무 내용이 아니랍니다... 단지... 좀 헷갈리게 보여서 그럴뿐입니다...
함수 포인터 자체는 그냥 포인터 처럼 사용하는 거구요... destroy 함수를 물으셨는데, 당연히 그런 함수는 존재하지 않지요... 왜냐면, destroy 함수라고 생각하셨던 것은 단지, List 라는 구조체 안에서 구조체를 정의하기 위해 적어놓은 (함수가 아닌) 변수 이니까요... (그냥 변수가 아니라 함수를 가리키는 변수죠...)

일반 포인터 변수로서 하나의 예를 들어 보겠습니다...

void main()
{
    int a = 100;

    void fuction(&a);
}

void fuction(int *temp)
{
    int *b;

    b = temp;
}

이런 식으로 되는 겁니다... 즉, 님께서 보신 list_init 함수 인자 형식에서의 destroy는 위의 temp에 해당하는 거고... List 구조체 안의 destroy는 위의 b에 해당하는 겁니다.

list_init(&list, free);

님께서 위처럼 사용하셨다고 했는데요... 그럼... void free(void * ... ) 함수가 님께서 찾던 그 함수죠...^^
free가 위에서 &a 와 같다는 느낌이 들지 않습니까...? free앞에 &가 붙지 않는 이유는 함수는 그 이름이 바로 포인터이기 때문입니다... (배열도 그렇죠...)

-----------------------------------------------------
2. 디버깅 방법에 대한 내용...

F8을 누르시면... 항상 현재 위치에서 바로 다음 라인으로 이동하게 됩니다...
만약 어떤 함수 내부로 들어가고 싶으시면... 디버거가 그 함수 위치에 도달했을 때, F7을 누르시면 됩니다. 그 다음 그 함수 내부에서 F8을 계속 누르시고... 또 들어가고 싶은 함수가 있을 때, F7을 누르죠...

솔직히... 저는 그게 귀찮아서... F9를 누르면... 현재 브레이크 걸린 곳까지 곧장 실행한다음 멈추거든요... 그래서 원하는 함수 맨 앞에다가 브레이크를 걸고, F9를 누르는 방법을 주로 이용합니다...
또 다음에 서고 싶은 곳에다가 브레이크 걸고, F9 뭐 이렇게 합니다.

도움이 되셨는지...^^

그럼... 즐넷하세요...


서영재 님이 쓰신 글 :
: 안녕하세요
: ^^ 오랜만에 글올립니다
: 요즘 알고리즘공부한다고.. 이거 방학때 빨랑끝내고 다시 빌더로 돌아와야할텐데...
:
: 알고리즘을공부하는데 함수포인터에서 막혀버렸습니다.
:
: 일단 선언은
:
: typedef struct List_ {
:     int                size;
:     int                (*match)(const void *key1, const void *key2);
:     void               (*destroy)(void *data);
:     ListElmt           *head;
:     ListElmt           *tail;
: } List;
:
: 이렇게 되어있는데 두번째와 세번째 함수포인터에서 문제가 났습니다.
: 그쓰는부분은
:
: void list_init(List *list, void (*destroy)(void *data)) {
:     list->size = 0;
:     list->destroy = destroy;
:     list->head = NULL;
:     list->tail = NULL;
:     return;
: }
:
: 여기인데.. 제가 알기론
: list->destroy 의 값이 destroy 로되어있는데 그럼
: void destroy(void *data){
: }
: 라는 함수가있어야하는데 아무리 뒤져봐도 없더군요
: 비슷한 함수가 있다면
: void list_destroy(List *list) {
: }
: 이런함수가있구요
: list_init 를 쓸땐
: list_init(&list, free); 이렇게 쓰는데
: 제가 list_init(&list, free); 여기에 중지점을 걸어놓고 F8(step over) 컴파일을 눌렀는데
: 헤더파일에 있는 list_init()함수로 넘어가지질 않더군요
: 원래 list_init()함수로 넘어가서 하나하나씩 컴파일 해야되지 않나요?
: ^^
: 여튼 제질문이 두서없게 길었는데...(제가 문장력이딸려서)
: 이게 왜이렇게 되는지 아시는분꼭 답변 부탁드릴께요
: 진도가 못나가고 있습니다. ㅠㅠ
: 그럼 좋은하루 되시구요!!!
:
:

+ -

관련 글 리스트
9447 [질문] F8키(step over)컴파일과 함수포인터 사용법에대해... 서영재 1080 2001/07/29
9501     Re:[질문] F8키(step over)컴파일과 함수포인터 사용법에대해... <- 함수 포인터 변수입니다... 김민호 1455 2001/08/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.