【问题标题】:Is message "the ABI of passing struct with a flexible array member has changed in GCC 4.4" important?消息“在 GCC 4.4 中使用灵活数组成员传递结构的 ABI 已更改”重要吗?
【发布时间】: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


【解决方案1】:
  1. 关于内存,每次我们调用这个函数时都会创建结构变量,所以浪费内存。
  2. 确认您的项目中是否需要 struct s c 或 struct s &c。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2011-03-04
    • 2012-09-22
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多