学生時代とは異なり、企業で別々の部署でモジュールを開発している場合にインタフェースを定義し、呼び出して利用することが一般的です。
C++だとインターフェースクラスなどが存在しますが、C言語を利用した場合の一般的な例は次のとおりです。
スポンサードリンク
関数ポインタを利用して宣言されたインタフェースを呼び出して利用するサンプルソースコードです。
#include <stdio.h>
typedef struct Hoge_Interface {
    int  (*Func1)(void);
    void (*Func2)(int num);
    void (*Func3)(const char *chr);
} Hoge_Interface;
void CallModuleB(void* pInterface)
{
    Hoge_Interface* pHoge = (Hoge_Interface*)pInterface;
    // 各インターフェースを条件に応じて呼び出す
    if (pHoge->Func1) pHoge->Func1();
    else              printf("Hoge->Func1 unread.\n");
    if (pHoge->Func2) pHoge->Func2(12345);
    else              printf("Hoge->Func2 unread.\n");
    if (pHoge->Func3) pHoge->Func3("hoge");
    else              printf("Hoge->Func3 unread.\n");
    return;
}
int Hoge_Func1(void)
{
    printf("%s()\n", __FUNCTION__);
    return 0;
}
void Hoge_Func2(int num)
{
    printf("%s() num = %d\n", __FUNCTION__, num);
    return;
}
int main(void)
{
    // インタフェースを定義する
    // Func3 は利用しないとし、NULLとする
    Hoge_Interface Hoge = {
        Hoge_Func1,
        Hoge_Func2,
        NULL,
    };
    // インタフェースのポインタを渡す
    CallModuleB(&Hoge);
    // この関数から使う場合の例
    Hoge.Func1();
    Hoge.Func2(999);
    return 0;
}
gcc IF_Test.cpp -lstdc++
スポンサードリンク
各関数が呼び出されることを確認できます。
$ ./a.out Hoge_Func1() Hoge_Func2() num = 12345 Hoge->Func3 unread. Hoge_Func1() Hoge_Func2() num = 999
スポンサードリンク