Cpp 에서, Pointer 를 함수처럼 사용하는 문법?

조회수 488회

안녕하세요.

Cpp 뉴비인데 처음보는 문법이 있어서, 그리고 이걸 어떻게 검색을 해야할지도 잘 모르겠어서 이렇게 질문을 올립니다.

다름이 아니라, 질문의 제목처럼 데이터가 Pointer 타입인데 함수처럼 사용을 해서 그것이 의문이 들어서 질문을 합니다. 혹시 이런 문법을 부르는 용어나 관련 문서가 있으면 링크를 남겨주시면 무척 감사하겠습니다!

// 문제의 코드...
llvm::Function * function_call;

// 이걸??
function_call(FindIntrinsic(module, "__remill_function_call"))
// static llvm::Function *FindIntrinsic(llvm::Module *module,
//                                     const char *name)

도대체 무슨 문법이고, 무슨 의도인지도 상상이 잘 가지가 않습니다.

Function 타입의 Pointer 변수인 function_call 이. function_call(Function) 을 한다??

이게 무슨 엄청 당연한 문법인 것 같은데(CPP 하시는 분들의 입장에서는...) 저는 뭔지 잘 모르겠습니다.. Pointer가 () 함수처럼 Callable 하고, 그것으로 인자를 해당 포인터 타입을 사용한다?? 메모리 값복사??? ???? ㅠㅠㅠㅠ

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    올려주신 코드 검색해보니 https://github.com/lifting-bits/remill 내에서 Class Function; 에 대해서 아무리 찾아봐도 ..못찾겠어가지고 정확한 답변이 못되는점 양해 부탁드립니다.

    void test(int a)
    {
            printf("welcome to %d\n", a);
            system("/bin/sh");
    }
    
    int main()
    {
            void (*func)();
            func = (long *)test;
            func(1);
    }
    

    최초 정의된 func에 파라미터가 있다고 표현되지 않더라도 해당 가리키는 함수실행 함수의 Parameter 가 있을경우에도 호출 가능합니다. 위는 그에 해당하는 예제입니다.

    두서없이 답변드렸는데 도움됬으면 좋겠네요. 저도 코알못이라서...

    추가) 활동내역보시니 고수이신거 같아서 불필요내용은 삭제했습니다.

    • 음. llvm::function* k 이것 자체에서 이미 포인터를 선언할 때 부터, k()가 가능하게 하는건가요? 따로 어디에다가 명시적으로 적어놓지 않더라도??.. dbwodlf3 2020.5.25 16:11
    • 네 정확한건 function 이란 클래스의 정의를 봐야할거같은데 해당 git에서 못찾겠더라구요 명시적으로 적을 필요 없이 해당 주소값을 참조해서 실행될 수 있습니다. 하지만 어떠한 이유로? 어떠한 동작을 위해서? 라면 해당 클래스에 대한 정보가 필요로 보입니다 김호원 2020.5.25 16:17
    • class가 callable 하면, 해당 Pointer도 따로 작업같은거 안하고 그냥 해당 Class라고 선언만 하면. 그냥 바로 Function 처럼 사용할 수 있는 것이죠? static function 같은건??? method는 사용할 수 없고??? 흠. 앗. 정의는 여기에 있습니다. https://llvm.org/doxygen/Function_8h_source.html dbwodlf3 2020.5.25 16:22
    • 아마 질문자님이 의문 가졌던 부분에 대해서 생각해보니 제가 잘못된 지식을 갖고 있는거 같습니다. 해당 깃 참고하여 코드 다시 읽어보니 2가지가 있는데 그 부분은 제가 모르는 부분이라서 답변은 제한되지만 해당 function_call 은 헤더쪽에서 정의되고 해당 cpp파일에서 볼때 '엔터'하고 작성된게 아니라 위쪽 error 객체포인터 기준으로 해서 ',' 로 연결된거 같아요. 처음에는 단순 객체포인터에 대한 깊은복사 인줄 알았는데 해당 부분은 아닌거 같고 김호원 2020.5.25 20:22
    • 해당 부분에 있어 저도 정확히 객체포인터에 깊게는 모르다보니 아무래도 처음부터 잘못된 지식이라 잘못된 정보 전달드린거 같습니다 도움이 안되어서 안타까우며 혼동을 드려 죄송합니다 김호원 2020.5.25 20:23
    • 아아.. 아닙니다. 시간내주셔서 알아봐주시고 답변 달아주셔서 감사합니다. 곰곰히 생각해보니까, pointer 에 값을 초기화 해주는 방법인 것 같습니다. 생성자? copy constructor? 그런 문법으로요. 감사합니다. dbwodlf3 2020.5.26 00:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)