それを行うためのさらに別の方法は、静的関数をコールバックにすることです。
//------------------------------
// file react.c
#include "event.h"
static void react_on_event_A(void)
{
// do something if event_A occurs.
}
void react_init(void)
{
event_setup(EVENT_A, react_on_event_A);
}
react_on_event_A
ここでは、イベント ドライバーが呼び出すことができるコールバックとして関数を設定していますが、他のユーザーがその識別子によって関数を呼び出すことをブロックしています。あなたは本当に他の誰かにその機能をやめるように言っています.
イベント ドライバーは次のようになります。
//------------------------------
// file event.h
typedef enum {
EVENT_A,
} event_t;
void event_setup(event_t event, void (*callback)(void));
void event_check_and_run(void);
//------------------------------
// file event.c
static void (*event_A_callback)(void);
void event_setup(event_t event, void (*callback)(void))
{
if (event == EVENT_A) {
event_A_callback = callback;
}
}
// Scheduled periodically, or reacting on interrupt.
void event_check_and_run(void)
{
if (occured(EVENT_A) && (event_A_callback != NULL)) {
event_A_callback();
}
}
そうすることの利点は、モジュールreact
が他のどのモジュール (event
この場合) が独自の静的関数にアクセスできるかを制御することです。
他の選択肢 (関数を作成するstatic
かしないか、またはヘッダー ファイルにポインターを発行する) では、アクセス権を誰にも、または全員に付与します。