gpt4 book ai didi

c - C typedef:参数的类型不完整

转载 作者:行者123 更新时间:2023-12-05 01:29:15 24 4
gpt4 key购买 nike

GCC 3.4.5(MinGW版本)产生警告:以下C代码的第2行的参数类型不完整:

struct s;
typedef void (* func_t)(struct s _this);
struct s { func_t method; int dummy_member; };


有没有办法在不将方法参数的签名更改为(struct s *)的情况下解决此问题(或至少隐藏警告)?

注意:
至于为什么这样的东西会有用:我目前正在修补一个面向对象的框架。 “方法”是调度表中的一个条目,由于框架的特殊设计,有意义的是按值而不是按引用传递“ _this”(通常这样做)...

最佳答案

您不太容易做到这一点-根据C99 standard的6.7.5.3节第4段:


调整后,函数声明器中的参数类型列表中的参数即为
该函数定义的一部分不得具有不完整的类型。


因此,您的选择是使函数采用指向结构的指针,或使指针指向稍有不同的类型的函数,例如采用未指定参数的函数:

typedef void (* func_t)(struct s*);  // Pointer to struct
typedef void (* func_t)(void *); // Eww - this is inferior to above option in every way
typedef void (* func_t)(); // Unspecified parameters

关于c - C typedef:参数的类型不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com