ホームページ >バックエンド開発 >C++ >C で標準ライブラリ関数のアドレスを取得できますか?

C で標準ライブラリ関数のアドレスを取得できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-25 00:13:11752ブラウズ

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 への 2 回目の呼び出し

std::invoke(static_cast<ctype_func>(std::tolower), 'A');

ただし、 で定義された関数の場合、[ cctype.syn] には、特定の関数が C 標準ライブラリのヘッダー に従って定義されていることが記載されています。 のどこにもありませんto lower はアドレス指定可能として指定されているため、to lower へのポインターを形成しようとするため、このプログラムの動作は未指定です (おそらく不正な形式です)。

結論

予期しない出力は保証されません、コードがコンパイルできない場合もあります。これは、C 標準ライブラリで宣言されたメンバー関数にも当てはまります。

以上がC で標準ライブラリ関数のアドレスを取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。