Cで制御を渡す

オブジェクト指向プログラミングでは、クラス間で制御を渡すことができ、物事をより整理しやすくすることができます。私はオブジェクト指向プログラミング言語ではないのでC言語ではクラスが存在しないことを認識しますが、新しいファイルを書くことができます。物事をもっと簡単にするために?

What I'm really asking is : how do I pass control to an outside extension of the program, and do I need to use any special type of program (.dll, etc.)

0
あなたは図書館について話していますか?次に、GCCで -l <​​/ code>フラグを使うことができます
追加された 著者 check123,
何のコントロール?キーボード、マウス、イベント処理?
追加された 著者 Chase Walden,

2 答え

基本的に、C ++はCと比較してプログラム構造体系の面で多くを導入していません。

C ++では、実際にはクラス間でクラスを渡すことはありません。クラスのメソッドを呼び出すだけです。クラスメソッドは、いくつかの追加機能を持つ関数です。したがって、C ++と同じように、コントロールを渡すという同じ手法をCで使用することができます。例えば:

//C++
class A {
public:
A(int n) { /*...*/ }
int DoSomething() { /*...*/ }
protected:
int m_SomeMember;
double m_AnotherMember;
};

AInst(8);
int x = AInst.DoSomething();

//C
struct A {
int m_SomeMember;
double m_AnotherMember;
};

void InitializeA(struct A* pa, int n)
{ 
/*...*/ 
}

int DoSomethingWithA(struct A* pa)
{
/*...*/ 
}

struct A AStructInst;
InitializeA(&AStructInst, 8);
int y = DoSomethingWithA(&AStructInst);

唯一の問題は、C ++と比較してCでプログラムを構造化するために、より多くの努力が必要な場合があります。たとえば、後者の言語はオブジェクトの適切な初期化と破棄に注意を払いますが、Cではこのようなものを自分で処理する必要があります。

静的および/または動的ライブラリを使用する場合、2つの言語はほとんど同じです。関数名のmangling、vtablesなどの微妙な違いのために、C ++ライブラリを他のコンパイラやプラットフォームに移植できるようにしようとすると、より多くの問題が生じます。

3
追加された
まさに私が求めていたもの。ありがとう。
追加された 著者 JAW1025,

Cでは、関数間で制御を渡します。 C ++では、クラスまたは関数の間で "制御を渡します"。

それ以外の違いはほとんどありません。ある言語で書かれたプログラムの動作は、他の言語で書かれた同様のプログラムの実行時の挙動と事実上区別できません。

おそらくあなたは "共有ライブラリ"を考えているでしょうか?共有ライブラリはプラットフォーム(WindowsとLinuxなど)に依存し、プログラミング言語(CとC ++)ではそれほど異なりません。

あるいは、あなたは "ランタイム読み込み可能クラス"(JavaやC#のような)を考えているかもしれません。これらは「仮想マシン」(Java JREや.NETランタイムなど)に依存します。 CやC ++はそのようなVMの中で実行されず、共有ライブラリが提供する機能を超えた「ランタイム読み込み可能クラス」もサポートしていません(共有ライブラリもCまたはC ++で同等に機能します)。

'希望が助けてくれる...

1
追加された