C 構造体内で関数を定義できますか? [重複] 質問する

C 構造体内で関数を定義できますか? [重複] 質問する

いくつかの C++ コードを C に変換しようとしているのですが、いくつか問題が発生しています。

構造体内で関数を定義するにはどうすればよいですか?

このような:

 typedef struct  {
    double x, y, z;
    struct Point *next;
    struct Point *prev;
    void act() {sth. to do here};
} Point;

ベストアンサー1

structいいえ、 C ではa 内で関数を定義することはできません。

ただし、関数ポインターを持つstructことは C++ のメンバー関数とは非常に異なります。つまり、それthisを含むstructインスタンスへの暗黙的なポインターは存在しません。

架空のサンプル(オンラインデモ)http://ideone.com/kyHlQ):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct point
{
    int x;
    int y;
    void (*print)(const struct point*);
};

void print_x(const struct point* p)
{
    printf("x=%d\n", p->x);
}

void print_y(const struct point* p)
{
    printf("y=%d\n", p->y);
}

int main(void)
{
    struct point p1 = { 2, 4, print_x };
    struct point p2 = { 7, 1, print_y };

    p1.print(&p1);
    p2.print(&p2);

    return 0;
}

おすすめ記事