包含结构本身作为参数的函数指针位于同一结构中

时间:2018-07-11 22:09:58

标签: c struct function-pointers

runtimeconfig.dev.json

您认为这是在struct中使用函数指针的有效方法吗?
注意::请不要说自己尝试一下。编译没有问题。我只是想知道这是否是C语言的标准属性。还会在其他编译器中编译吗?

1 个答案:

答案 0 :(得分:2)

它不能在gcc,clang或tinycc上编译,因此不能编译。 在typedef结束之前,SpriteGrid还不算什么,所以您不能使用它。向前声明该结构(带有标签),并且typedef应该对其进行修复。

typedef struct SpriteGrid SpriteGrid; 
typedef struct SpriteGrid /*this typedef is redundant now*/
{
    int x1,y1,x2,y2;
    int (*division_mode_x)(int i,int x1,int x2,SpriteGrid grid);
    int (*division_mode_y)(int i,int y1,int y2);
}SpriteGrid;

或者,您可以

typedef struct SpriteGrid
{
    int x1,y1,x2,y2;
    //without the forward typedef `SpriteGrid` isn't usable
    //here yet, but `struct SpriteGrid` is 
    int (*division_mode_x)(int i,int x1,int x2,struct SpriteGrid grid);
    int (*division_mode_y)(int i,int y1,int y2);
}SpriteGrid;

依赖于标签在struct tag之后立即可用的事实。