function.h
仮定しましょう、私は(in )のようなプロトタイプを持つ関数を持っています
void function(int argument, bool flag);
この関数には、に依存する2つの異なる動作がありflag
ます。
早い段階で、モジュール(module.h
、module.c
)でその関数を呼び出しました。
#include "function.h"
function(argument1, true);
function(argument2, false);
さらに、この関数をモジュールに渡し、その依存関係を反転させたいと仮定しましょう。
void (* funcPtr)(int argument, bool flag);
void setFuncPtr(void (* func)(int argument, bool flag))
{
funcPtr = func;
}
今私は持つことができますfunction.c
:
#include "module.h"
setFuncPtr(function);
そしてでmodule.h
:
funcPtr(argument1, true);
funcPtr(argument2, false);
それぞれが関数を指しているが、異なるハードコード値を持つ2つのポインターを持つ方法はありますflag
か?好き:
void (* funcPtrTrue)(int argument, bool flag);
void (* funcPtrFals)(int argument, bool flag);
/* Or, even better
void (* funcPtrTrue)(int argument);
void (* funcPtrFals)(int argument);
*/
void setFuncPtr(void (* func)(int argument, bool flag))
{
funcPtrTrue = func(argument, true);
funcPtrFalse = func(argument, false);
}
(私は今、これは正しいコードではありませんが、必要な機能を説明する必要があります)
オリスの提案の後、物事を複雑にしましょう。bool
のtypedefですfunction.h
:
typedef enum {
FALSE,
TRUE
} bool;
今、私はそれを再び機能させるためにfunction.h
再び含める必要がありmodule.c
ます。
#include "function.h"
void functionTrue(int argument)
{
fktPtr(argument, TRUE);
}