【发布时间】:2008-12-16 15:10:55
【问题描述】:
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 *) 的情况下解决此问题(或至少隐藏警告)?
注意:
至于为什么这样的东西会有用:我目前正在修补一个面向对象的框架; 'method' 是调度表中的一个条目,由于框架的特殊设计,通过值而不是通过引用传递 '_this' 是有意义的(通常是这样做的)...
【问题讨论】:
-
GCC 的哪个版本?确切的 sn-p 代码(加上一个主要功能)没有给我 Ubuntu 附带的 GCC 4.3.2 的警告。是否还有其他导致警告的原因?
-
我目前坚持使用 MinGW 版本的 gcc,即 3.4.5(?)。但很高兴知道问题最终可能会消失......
-
GCC 3.4.6 在 -Wall 下抱怨; GCC 4.3.2 没有 - Solaris 10。
-
你会如何使用这个结构/函数?这是一个最大限度地减少的例子(通常是一件好事——尽管你可能已经在最小化方面走了一步),还是一个捏造的测试用例?我看不出如何从这样的结构或函数中获得有用的结果。
-
为什么按值传递有意义?