'함수 포인터'에 해당되는 글 2건

  1. 2012.03.07 함수 포인터 배열
  2. 2010.09.16 함수 포인터 (function pointer)
함수 포인터는 거의 쓸일이 없었는데 문득 보이길래 한번 시도~
int main() 안의 void (*funcpointer[5])(); 가 포인터 함수 배열이다.

만약, 
void *funcpointer[5];
라고만 선언하고, 변수를 넣으면 함수 호출시
error: called object ‘funcpointer[0]’ is not a function
요런 에러를 발생시켜준다.

void func1() {}
void func2() {}
void func3() {}
void func4() {}
void func5() {}

int main()
{
	void (*funcpointer[5])();

	funcpointer[0] = func1;
	funcpointer[1] = func2;
	funcpointer[2] = func3;
	funcpointer[3] = func4;
	funcpointer[4] = func5;

	(*funcpointer[0])();

	return 0;
}

[링크 : http://www.newty.de/fpt/index.html]
[링크 : http://stackoverflow.com/questions/252748/how-to-use-array-of-function-pointers]
신고
Posted by 구차니

댓글을 달아 주세요

Programming/언어론2010.09.16 09:15
포인터는 메모리의 특정 지점을 찍어주는 역활을 한다.
즉, 데이터든 코드든 어디든 찍을수가 있다.

함수 포인터에서 의문점이 생긴것은 바로 함수 포인터의 선언부분이다.
#include <stdio.h>

void testout1(const char *s) {
  printf("시험출력1:%s\n", s);
}

void testout2(const char *s) {
  printf("시험출력2:%s\n", s);
}

// 함수포인터 변수
void (*funcPtr)(const char *s);

int main() {
  // 함수포인터를 testout1, testout2로 각각 대입해보고 실행해본다.
  funcPtr = testout1;
  funcPtr("테스트");
  funcPtr = testout2;
  funcPtr("테스트");
}

[링크 : http://www.redwiki.net/wiki/wiki.php/%C7%D4%BC%F6%C6%F7%C0%CE%C5%CD]

위의 코드를 보면,
 void (*funcPtr)(const char* s);
위의 부분에서 함수 포인터의 인자(arguments)들의 형은 존재하지만, 변수명은 존재하지 않는 경우가 많다.

물론 VS2010 에서 컴파일을 해보아도
변수명이 존재를 하던 변수형만 존재를 하던 상관은 없지만 왜 그럴까? 라는 궁금증이 생겼다.

왜 그럴까?
아마도, 함수 포인터에서 중요한건 연결되는 함수와,
넘겨지는 변수들의 형, 그리고 갯수이지 변수명이 아니기 때문이 아닐까?

어짜피 stdcall 형태로 calling convention을 유지한다면
넘어가는 변수명 따위는 내부적으로는 의미가 없고, 넘어가는 순서가 중요하니 말이다.
그런 이유로, 함수 포인터의 선언에는 변수형만 존재하고 변수명은 옵션으로 존재하는 것으로 생각된다.

[링크 : http://www.cplusplus.com/doc/tutorial/pointers/]
신고

'Programming > 언어론' 카테고리의 다른 글

dangling if-else  (0) 2014.08.13
double의 정확도 자릿수  (0) 2011.03.25
함수 포인터 (function pointer)  (0) 2010.09.16
type system  (0) 2010.09.15
calling convention(콜링 컨벤션)  (0) 2010.04.17
Posted by 구차니

댓글을 달아 주세요