具有相同参数类型的结构中的函数指针

ran*_*ght 3 c struct function-pointers

我正在尝试创建一个结构,该结构具有一个函数的函数指针,该函数使用与参数相同的结构.我现在有这个.

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(sharedData*);
};
Run Code Online (Sandbox Code Playgroud)

我收到的错误就像

错误:在'*'标记之前预期')'

和警告一样

 warning: no semicolon at end of struct or union 
 warning: useless storage class specifier in empty declaration
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

tem*_*def 6

问题是当你typedef struct用来引入一个struct不需要struct关键字的新东西时,你不能typedef在声明中引用-ed名称struct.相反,您需要使用结构的全名.例如:

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
};
Run Code Online (Sandbox Code Playgroud)

此外,您的typedef声明目前无效,因为您没有给出要呼叫的名称struct sharedData.解决这个问题的一种方法如下:

typedef struct sharedData
{
    sem_t* forks;
    int id;
    void (*forkFunc)(struct sharedData*);
} sharedData;
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过全名struct sharedData或简写名称来引用结构sharedData.

  • 删掉最后的下划线; 它只是丑陋和无用.对struct标签和typedef使用相同的名称是完全有效的. (2认同)