2016-09-21 3 views
0

프로젝트에서 나는 공유 라이브러리에서로드 된 함수에 대한 포인터 맵을 만드는 복잡한 매크로를 발견했다. 동일한 방법으로로드해야하는 다른 라이브러리에서이 라이브러리를 사용하려면 해당 라이브러리를 검사해야만했으며, 아는 한 작동하지 않아야하는 행이 있다는 것을 알아 냈습니다. 아래로 간단한 코드로 비등하기 위해, 나는 멀리 모든 구문 설탕을 던지고 예를했다 :왜 포인터로 함수를 호출하는 두 가지 방법이 있습니까?

#include <iostream> 

using namespace std; 

void func(int i, float f) 
{ 
    cout << "Parameter is " << i << " and " << f << endl; 
} 


typedef void (*FunctionFunc)(int i, float f); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    FunctionFunc p = &func; 
    (p)(5,4.3f); 
    return 0; 
} 

할까요 (5,4.3f) (* p)를 같이하지 함수 호출 봐 - K 이후 책에 따라 & R 's? 컴파일러는 VS2010이며 위의 코드는 별표와 함께 작동합니다.

+1

[this] (http://stackoverflow.com/questions/12152167/why-is-using-the-function-name-as-a-function-pointer-equivalent-to -applying-the) – user3286661

+0

@ user3286661 : 역 변환입니다. – MSalters

+0

@MSalters이 질문에 대한 대답은이 질문에 대한 아주 좋은 답변입니다. –

답변

1

아니요, 참조가 필요하지 않습니다. 함수 포인터는 함수처럼 호출 가능합니다. 심지어 p(5, 4.3f)도 허용되었을 것입니다.

관련 문제