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

C++ 可以將空指標轉換為函式指標嗎?

發佈於2024-11-12
瀏覽:441

Can C   Convert a Void Pointer to a Function Pointer?

將空指針轉換為函數指針:C 中的條件可能性

問題

透過dlsym() 取得空指針,目標是呼叫該指標引用的函數。與 C 風格的強制轉換不同,嘗試使用 static_cast 或 reinterpret_cast 進行強制轉換已失敗。

答案

在 C 98/03 中不允許將 void 指標直接轉換為函數指標。然而,C 0x 提供了條件支持,允許實現來決定行為。

未定義的行為方法:

雖然標準未定義,但以下程式碼可能適用大多數平台:

void *gptr = dlsym(some symbol..);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));

或:

fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;

複雜但可移植的方法:

此方法利用了函數指標的位址是物件指標的事實:

// Get address as object pointer
void (**object_ptr)() = &my_ptr;

// Convert to void** (also an object pointer)
void **ppv = reinterpret_cast(object_ptr);

// Store address from 'gptr' in memory cell pointed to by 'ppv'
*ppv = gptr;

此方法在標準中仍未定義,但在大多數實作上應該運行得相當好。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3