C中构造体在定义时可以定义自身类型的成员吗

C中结构体在定义时可以定义自身类型的成员吗?

typedef struct DATA{
   void (*fun)(struct DATA *data);//这种可以,好多人写的函数这样用,有什么好处?怎么调用
   void (*fun2)(struct DATA data2);//这种是不是不可以?why?
}DATA_T;

------解决方案--------------------
楼上的都没有试过吧!
实际上是可以的。

原因也很简单,
函数指针的size是能计算的,也没有什么循环的问题。
------解决方案--------------------
针对楼主的例子,两种都是可以的

针对楼主的问题:C中结构体在定义时可以定义自身类型的成员吗?
不行,因为结构体中的各个成员所需的存储空间大小是编译的时候确定的,
在结构体定义中如果定义自身类型的成员,因为此时结构体大小还不确定,
所以此时定义的成员所需的存储空间大小就不确定,因此编译不会通过。
但是可以定义成自身类型的指针,因为指针所需的存储空间大小是可以确定的。
比如:

struct test {
    struct test *pt;   /* pt是指针,指针占用空间已经确定,因此可以 */
    struct test t;    /* 在结构体还没定义完之前,编译器不知道该类型所需多大空间,
                         所以在这里会出错 */
};