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(避免直接轉換方法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* 轉換為函數指標的行為。
以上是如何安全地將 `void*` 轉換為 C 中的函數指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!