C에서 함수 포인터 캐스팅
C에서 void*를 함수 포인터로 직접 변환하는 것은 일반적으로 허용되지 않습니다. 그러나 구현 및 플랫폼에 따라 작동할 수 있는 몇 가지 접근 방식이 있습니다.
방법 1(정의되지 않은 동작):
이 방법에는 이중 reinterpret_casting이 포함됩니다.
<code class="cpp">void *gptr = dlsym(some symbol..); typedef void (*fptr)(); fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
방법 2(직접 변환 방지):
이 방법은 중간 단계를 사용하여 함수 포인터 주소를 변수에 저장합니다.
<code class="cpp">fptr my_ptr = 0; reinterpret_cast<void*&>(my_ptr) = gptr;</code>
느리지만 더 투명한 방법 2 버전:
<code class="cpp">void (**object_ptr)() = &my_ptr; void ** ppv = reinterpret_cast<void**>(object_ptr); *ppv = gptr;</code>
제한 사항 및 주의 사항:
참고:
C 0x에서는 void*를 함수 포인터로 변환하는 동작이 조건부로 지원됩니다.
위 내용은 C의 함수 포인터에 'void*'를 안전하게 캐스팅하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!