在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