是“信息”;GCC 4.4“中使用灵活数组成员传递结构的ABI已更改;重要吗? 我想知道编译器中的消息是否是一个值得仔细考虑的问题。

是“信息”;GCC 4.4“中使用灵活数组成员传递结构的ABI已更改;重要吗? 我想知道编译器中的消息是否是一个值得仔细考虑的问题。,c,gcc,compiler-construction,C,Gcc,Compiler Construction,让我们看看下面的代码: 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 我的问题是:在更大的项目中使用这样的结构安全吗?这种结构(除了编译器消息之外)可能存

让我们看看下面的代码:

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
我的问题是:在更大的项目中使用这样的结构安全吗?这种结构(除了编译器消息之外)可能存在哪些风险和影响

  • 关于内存,每次我们调用这个函数时,都会创建结构变量,从而浪费内存
  • 确认您的项目中是否需要struct s c或struct s&c

  • 您是否将使用
    gcc 4.4
    或更高版本构建的代码与使用
    gcc
    的前
    4.4
    版本构建的代码混合使用?是。它存在于gcc 4.4之前。代码是经过较长时间制定的。我最近才注意到这个注意事项。它不是一条错误消息,它只是警告您所使用的构造的ABI已经更改。在实践中,这意味着,如果将使用早期版本的gcc和当前版本的gcc编译的对象文件和库混合在一起,可能会出现错误。因此,我的理解是,我们可以保留这种结构,但整个项目必须使用gcc>=4.4编译?如果项目的某些部分使用gcc<4.4进行编译,这是一个很大的否定?