首頁 > 後端開發 > C++ > C 可以將空指標轉換為函數指標嗎?

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

Mary-Kate Olsen
發布: 2024-11-03 04:42:31
原創
811 人瀏覽過

Can C   Convert a Void Pointer to a Function Pointer?

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

問題

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

答案

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

未定義的行為方法:

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

<code class="cpp">void *gptr = dlsym(some symbol..);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
登入後複製

或:

<code class="cpp">fptr my_ptr = 0;
reinterpret_cast<void*&>(my_ptr) = gptr;</code>
登入後複製

複雜但可移植的方法:

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

<code class="cpp">// Get address as object pointer
void (**object_ptr)() = &my_ptr;

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

// Store address from 'gptr' in memory cell pointed to by 'ppv'
*ppv = gptr;</code>
登入後複製

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

以上是C 可以將空指標轉換為函數指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板