【发布时间】:2023-03-23 07:21:01
【问题描述】:
我想知道来自编译器的这条消息是否值得仔细考虑。
我们看下面的代码:
struct s
{
int a;
int b[];
};
void fun(struct s c)
{
}
int main()
{
return 0;
}
这给出了以下错误:
main.c:7:6: note: the ABI of passing struct with a flexible array member has changed in GCC 4.4
我的问题是:在更大的项目中使用这种结构安全吗?这种结构的可能风险和影响是什么(除了编译器消息)?
【问题讨论】:
-
您是否将使用
gcc 4.4或更高版本构建的代码与使用4.4之前的4.4版本构建的代码混合在一起? -
是的。它存在于 gcc 4.4 之前。该代码是通过更长的时间制作的。我最近才注意到这个注释。
-
这不是错误消息,它只是警告您使用的构造的 ABI 已更改。实际上,这意味着如果混合使用早期版本的 gcc 和当前版本的 gcc 编译的目标文件和库,可能会出现错误。
-
所以我的理解是我们可以保留这样的结构,但是整个项目必须用 gcc >= 4.4 编译?如果项目的某些部分是用 gcc
标签: c gcc compiler-construction