我有一个按以下方式工作的 C 代码:标头包含函数的声明,例如:
typedef struct MyStruct
{
int thing;
void* reserved;
} MyStruct;
void foo(MyStruct* bar);
然后,在我的 .c 代码中,我有这个:
typedef struct EXTENDED
{
float more_stuff;
} EXTENDED;
struct MyStructEx
{
int thing;
EXTENDED* ex;
} MyStructEx;
void foo(MyStructEx* bar)
{
...
}
这在 MSVC 下编译得很好(警告告诉我标头和实现参数不匹配)但是 Code::Blocks (GCC) 会引发错误。有没有办法消除这个错误或至少让它成为一个警告,或者我唯一的选择是把额外的定义也放在标题中?
我这样做是因为我正在用 C 编写一个模块化库,所以有时各个组件需要“临时空间”才能工作(这是标题中保留的 void*),并避免在任何地方都有一堆演员表'正在尝试将通用的 MyStruct 结构隐式转换为更专业的结构。
所以我的问题是,我应该使用哪个选项将此类错误更改为警告,和/或是否有更好的方法来实现这一点?(我需要使用标准 C)。