2

重複しないようにこの質問を投稿することについて最初の不安がありました.しかし、多くのキーワードでグーグル検索した後でも、Cの静的および動的バインディングを説明するStackOverflowのリンクを見つけることができませんでした.ただし、C++の質問と回答がありますが、すべてclassesが明らかに C 向けではないものを含みます。また、StackExchange 以外のリンクは非常に疑わしいものでした。

これら2つのバインディングの厳密な定義と対比を知る必要があります.CIのコンテキストに限定して、回答するのに少し時間がかかるか、私が間違っていて回答されていないことを確認するためのStackOverflowのリンクを教えていただければ幸いです.前に詳しく。

私は次のことについて明確な考えを持っているつもりです:

  1. C でのバインド。
  2. C での静的バインディングと動的バインディング。

編集いくつかの簡単なコード スニペットで違いを説明できれば、非常に役立ちます。

4

2 に答える 2

5

正式には、「ネイティブ」C にはそのような用語はありません。

静的バインディング (「初期バインディング」) および動的バインディング (「遅延バインディング」) という用語の簡単な説明: これらは、特定の継承されたメンバー関数を呼び出す決定がコンパイル時に行われるかどうかを判断するために、オブジェクト指向設計で最も頻繁に使用されます。時または実行時に。

仮想関数の意味は、継承された基本クラスの同等の関数の代わりに呼び出される継承された関数であることです。オブジェクトが「基本クラス」型か「継承クラス」型かをコンパイラがコンパイル時に判断できる場合は、静的バインディングを取得します。それ以外の場合は動的バインディングを取得します。そのため、ある種のランタイム タイプ情報 (RTTI) が必要になります。

上記のコンテキストでは、これらの用語は、C プログラムでオブジェクト指向の継承/ポリモーフィズムを使用している場合にのみ意味があります。C には、そのようなメカニズムに対する言語サポートがありません。それらを C で「手動で」実装すること可能ですが、それは面倒であり、コードは非常に混乱する傾向があります。強く主張する人のために、「ANSI-C でのオブジェクト指向設計」という本があり、それがどのように行われるかを示しています。

(個人的には、その本も、C でポリモーフィズムを実装することもお勧めしません。これらの OOP 機能が必要な場合は、C++ でコーディングしてください。)

于 2013-05-07T14:06:13.017 に答える
1

C は静的にコンパイルされる言語であり、実際には「動的バインディング」はありません。

POSIX' などの API を使用して手動で行うこともできますdlopen()が、ある意味ではそうだと思いますが、それを「バインディング」と呼ぶのは躊躇します。

于 2013-05-07T13:58:13.610 に答える