首頁 > 後端開發 > C++ > 我可以取得 C 語言中標準函式庫函數的位址嗎?

我可以取得 C 語言中標準函式庫函數的位址嗎?

Patricia Arquette
發布: 2024-12-25 00:13:11
原創
743 人瀏覽過

Can I Get the Address of a Standard Library Function in C  ?

我可以取得標準庫中定義的函數的位址嗎?

概述

C 程式可以取得標準函式庫中定義的函數的位址嗎?標準庫,如果是,在什麼條件下?

短回答

不,一般情況下不是。

解釋

根據[namespace.std],形成一個指向標準函式庫函數的指標是未指定的行為,除非該函數被指定為可尋址的。這也適用於成員函數。

第一次呼叫 std::invoke

std::invoke(std::boolalpha, std::cout);
登入後複製

在此範例中,std::boolalpha 是由 [fmtflags.manip] 指定的可尋址函數。因此,這一行格式良好,相當於:

std::cout.setf(std::ios_base::boolalpha);
登入後複製

第二次調用std::invoke

std::invoke(static_cast<ctype_func>(std::tolower), 'A');
登入後複製

但是,對於 中定義的函數,[ cctype. syn]說明具體函數是根據C標準庫頭檔定義的。 中沒有任何地方tolower 被指定為可尋址,因此由於嘗試形成指向 tolower 的指針,因此程式的行為未指定(可能格式錯誤)。

結論

不保證意外輸出,而且程式碼甚至可能無法編譯。這也適用於 C 標準函式庫中宣告的成員函數。

以上是我可以取得 C 語言中標準函式庫函數的位址嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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