c言語構造体における定義関数

787 ワード

通常、cコードを書くときは、構造体で関数を定義することを望んでいるかもしれませんが、c言語では直接定義関数はサポートされていません.関数ポインタを定義することで実現できます.

//           

#include 
#include 
 /*        ,       ,        ,       static,         */
struct prt_fn {
    int (*add) (int a, int b);
    int (*sub) (int a, int b);
    int (*mult) (int a, int b);
};


static int add(int a, int b)
{
    return a + b;
}

static int sub(int a, int b)
{
    return a - b;
}

static int mult(int a, int b)
{
    return a * b;
}

int main()
{
    int a = 10, b = 5;
    //       
    struct prt_fn pfn = { add, sub, mult };

    printf("a + b = %d
", pfn.add(a, b)); printf("a - b = %d
", pfn.sub(a, b)); printf("a * b = %d
", pfn.mult(a, b)); return 0; }