」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 C++ 中可以將 void 指標轉換為函式指標嗎?

在 C++ 中可以將 void 指標轉換為函式指標嗎?

發佈於2024-11-08
瀏覽:638

Can You Cast void Pointers to Function Pointers in C  ?

在C 中將空指標轉換為函數指標

將dlsym() 等函數傳回的空指標轉換為函數指標在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