gpt4 book ai didi

c - 隐式参数转换

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:48 24 4
gpt4 key购买 nike

我有一个以下列方式工作的 C 代码: header 包含函数声明,例如:

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 下编译得很好(警告告诉我 header 和实现参数不匹配)但是 Code::Blocks (GCC) 会抛出一个错误。有没有办法消除这个错误或至少让它成为一个警告,或者我唯一的选择是将额外的定义也放在标题中吗?

我这样做是因为我正在用 C 编写模块化库,所以有时各个组件需要“临时空间”才能工作(这是 header 中保留的 void*),并避免一堆到处转换我试图隐式地将通用的 MyStruct 结构转换到更专业的结构。

所以我的问题是,我应该使用哪个选项将此类错误更改为警告,和/或是否有更好的方法来实现这一点? (我需要使用标准 C)。

最佳答案

保留函数原型(prototype),在函数定义中强制转换指针

typedef struct EXTENDED
{
float more_stuff;
} EXTENDED;

struct MyStructEx
{
int thing;
EXTENDED* ex;
} MyStructEx;

void foo(MyStruct* bar)
{
MyStructEx *mse = (MyStructEx*)bar;
...
}

它将关闭编译器。

关于c - 隐式参数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442554/

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