C 指向函数、结构作为参数的指针

C 指向函数、结构作为参数的指针,c,parameters,struct,type-conversion,function-pointers,C,Parameters,Struct,Type Conversion,Function Pointers,今天再次重打 在结构中是指向函数的指针,在这个函数中,我希望能够处理来自这个结构的数据,所以指向结构的指针作为参数给出 这个问题的演示 #include <stdio.h> #include <stdlib.h> struct tMYSTRUCTURE; typedef struct{ int myint; void (* pCallback)(struct tMYSTRUCTURE *mystructure); }tMYSTRUCTURE; vo

今天再次重打

在结构中是指向函数的指针,在这个函数中,我希望能够处理来自这个结构的数据,所以指向结构的指针作为参数给出

这个问题的演示

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

struct tMYSTRUCTURE;

typedef struct{
    int myint;
    void (* pCallback)(struct tMYSTRUCTURE *mystructure);
}tMYSTRUCTURE;


void hello(struct tMYSTRUCTURE *mystructure){
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}

int main(void) {
    tMYSTRUCTURE mystruct;
    mystruct.pCallback = hello;

    mystruct.pCallback(&mystruct);
    return EXIT_SUCCESS;

}
#包括
#包括
结构t系统结构;
类型定义结构{
int-myint;
void(*pCallback)(结构tmysttructure*mystructure);
}t系统结构;
void hello(struct tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
但我得到了警告

..\src\retyping.c:31:5:警告:正在传递的参数1 来自不兼容指针类型的“mystruct.pCallback” ..\src\retyping.c:31:5:注意:应为“struct tmysttructure*”,但 参数的类型为“struct tmysttructure*”

应为“struct tMYSTRUCTURE*”,但为“struct tMYSTRUCTURE*”,很有趣

知道如何修复吗?

更正代码:

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

struct tMYSTRUCTURE_;

typedef struct tMYSTRUCTURE_ {
  int myint;
  void (* pCallback)(struct tMYSTRUCTURE_ *mystructure);
} tMYSTRUCTURE;


void hello(tMYSTRUCTURE *mystructure){
  puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}

int main(void) {
  tMYSTRUCTURE mystruct;
  mystruct.pCallback = hello;

  mystruct.pCallback(&mystruct);
  return EXIT_SUCCESS;

}
#包括
#包括
结构t系统结构;
typedef结构t系统结构{
int-myint;
void(*pCallback)(结构tmysttructure_*mystructure);
}t系统结构;
void hello(tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
请注意
struct
名称和
typedef
名称之间的差异。是的,你可以让他们一样,但许多人(包括我自己)觉得困惑。。。通常的做法是将它们区分开来


无可否认,GCC在这里的诊断有点奇怪。

这个问题是由
typedef
对结构进行加密,然后使用
struct
关键字和
typedef
'd名称引起的。向前声明
struct
typedef
修复了问题

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

struct tagMYSTRUCTURE;
typedef struct tagMYSTRUCTURE tMYSTRUCTURE;

struct tagMYSTRUCTURE {
    int myint;
    void (* pCallback)(tMYSTRUCTURE *mystructure);
};


void hello(tMYSTRUCTURE *mystructure){
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
}

int main(void) {
    tMYSTRUCTURE mystruct;
    mystruct.pCallback = hello;

    mystruct.pCallback(&mystruct);
    return EXIT_SUCCESS;

}
#包括
#包括
结构tagMYSTRUCTURE;
typedef struct tagMYSTRUCTURE t系统结构;
结构tagMYSTRUCTURE{
int-myint;
无效(*pCallback)(tSystemstructure*mystructure);
};
void hello(tmysttructure*mystructure){
放入(!!!你好,世界!!!”;/*打印!!!你好,世界*/
}
内部主(空){
t系统结构mystruct;
mystruct.pCallback=你好;
pCallback(&mystruct);
返回退出成功;
}
在您的代码中,没有
struct tmysttructure
,它是一个不完整的类型。您所拥有的只是一个匿名结构,它也恰好被定义为
tmysttructure
。看见