ホームページ >バックエンド開発 >C++ >## C API コールバックとしての静的メンバー関数ポインター: 安全性と移植性のジレンマ?

## C API コールバックとしての静的メンバー関数ポインター: 安全性と移植性のジレンマ?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 16:39:03214ブラウズ

##  Static Member Function Pointers as C API Callbacks:  A Safety and Portability Dilemma?

C API のコールバックとしての静的メンバー関数ポインター: 安全性と移植性のジレンマ

C で静的メンバー関数ポインターを C API コールバックとして使用すると、安全性と移植性に関する懸念が生じます。このような手法は最初は機能しているように見えますが、クラス静的関数は C 関数と同じ呼び出し規約を採用することが多いため、C 標準では安全でなく、推奨されないと考えられています。

標準 (3.5/10) によると、 )、「特定のオブジェクトまたは関数を参照するすべての宣言で指定された型は同一でなければなりません。」ただし、静的メンバー関数がコールバック ターゲットとして使用される場合、C 言語バインディングを使用するコールバック コードには、別の言語リンケージを持つ関数が必要になります。標準 (7.5/1) で定義されているように、「言語リンケージが異なる 2 つの関数型は、その他の部分が同一であっても、別個の型です。」

したがって、静的メンバー関数と API コールバックは同じものを共有する必要があります。言語のつながり。安全性と移植性を確保するために、C コードで C ABI コールバックを「extern "C"」として宣言することを強くお勧めします。

以上が## C API コールバックとしての静的メンバー関数ポインター: 安全性と移植性のジレンマ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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