> 백엔드 개발 > C++ > C에서 void 포인터를 함수 포인터로 캐스팅할 수 있나요?

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

Barbara Streisand
풀어 주다: 2024-11-02 21:20:30
원래의
503명이 탐색했습니다.

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*를 함수 포인터로 캐스팅하는 것은 구현에 의해 선택적으로 지원됩니다. 지원되는 경우 동작은 표준을 준수해야 합니다.

구현에 따른 해결 방법

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

  • 재해석 캐스트:
<code class="cpp">fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
로그인 후 복사
  • 가변 재해석:
<code class="cpp">fptr my_ptr = 0;
reinterpret_cast<void*&>(my_ptr) = gptr;</code>
로그인 후 복사

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

주의 사항

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

위 내용은 C에서 void 포인터를 함수 포인터로 캐스팅할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿