"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++에서 void 포인터를 함수 포인터로 캐스팅할 수 있나요?

C++에서 void 포인터를 함수 포인터로 캐스팅할 수 있나요?

2024-11-08에 게시됨
검색:528

Can You Cast void Pointers to Function Pointers in C  ?

C에서 Void 포인터를 함수 포인터로 캐스팅

dlsym()과 같은 함수에서 반환된 void 포인터를 함수 포인터로 변환하는 것은 C에서 간단하지 않습니다. . 기본적으로 C 98/03에서는 이러한 직접 캐스팅이 금지됩니다.

제한 이유

C 98/03에서 void* 포인터는 객체를 참조하기 위한 것이었습니다. 함수 또는 멤버 포인터가 아닙니다.

C 0x의 조건부 지원

C 0x에서 void*를 함수 포인터로 캐스팅하는 것은 구현에 의해 선택적으로 지원됩니다. 지원되는 경우 동작은 표준을 준수해야 합니다.

구현에 따른 해결 방법

직접 캐스팅은 허용되지 않지만 다음 해결 방법은 대부분의 플랫폼에서 작동할 수 있습니다.

  • 재해석 캐스트:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
  • 변수 재해석:
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;

이러한 해결 방법은 함수 포인터 주소가 객체이고 reinterpret_cast를 사용하여 void** 포인터로 변환될 수 있다는 사실을 활용합니다.

주의 사항

이러한 해결 방법에는 정의되지 않은 동작이 포함되므로 신중하게 사용해야 합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3