学生時代とは異なり、企業で別々の部署でモジュールを開発している場合にインタフェースを定義し、呼び出して利用することが一般的です。
C++だとインターフェースクラスなどが存在しますが、C言語を利用した場合の一般的な例は次のとおりです。
スポンサードリンク
関数ポインタを利用して宣言されたインタフェースを呼び出して利用するサンプルソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #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
スポンサードリンク