2013-04-09 63 views
4

我想知道这个来自编译器的消息是否应该仔细考虑。消息“GCC 4.4中传递结构与灵活数组成员的ABI已更改”重要?

让我们看看下面的代码:

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 

我的问题是:在更大的项目是使用这样的结构是否安全?这种结构的可能风险和影响(编译器消息除外)是什么?

+0

你是用'gcc 4.4'或更高版本构建的代码与'gcc'前''4.4'版本构建的代码混合吗? – NPE 2013-04-09 10:44:08

+0

是的。它存在于gcc 4.4之前。代码是通过更长的时间。我最近才注意到这个笔记。 – Melon 2013-04-09 10:47:13

+0

这不是一个错误消息,它只是警告你,你使用的构造的ABI已经改变了。在实践中,这意味着如果将用早期版本的gcc和当前版本的gcc编译的目标文件和库混合使用,就可以获得错误。 – Art 2013-04-09 10:52:30

回答

-1
  1. 关于内存,每当我们调用这个函数时,结构变量就会被创建,所以内存浪费了。
  2. 确认您是否需要结构s或结构s & c在您的项目中。
相关问题