这里使用了unused
属性和结构。
根据GCC文件:
未使用:
此属性附加到变量,表示变量为 意味着可能未被使用。海湾合作委员会不会对此发出警告 变量
但是,在下面的代码中,struct数组生成了警告。
#include <stdio.h>
struct __attribute__ ((unused)) St
{
int x;
};
void func1()
{
struct St s; // no warning, ok
}
void func2()
{
struct St s[1]; // Why warning???
}
int main() {
func1();
func2();
return 0;
}
为什么GCC会为struct数组生成警告?
答案 0 :(得分:9)
您没有将属性附加到变量,而是将其附加到类型。在这种情况下,适用不同的规则:
当附加到类型(包括
union
或struct
)时,此[unused]属性意味着该类型的变量可能看起来可能未使用。 GCC不会对该类型的任何变量发出警告,即使该变量似乎什么都不做。
这正是func1
内发生的事情:变量struct St s
的类型为struct St
,因此不会生成警告。
但是,func2
不同,因为St s[1]
的类型不是struct St
,而是struct St
的数组。此数组类型没有附加特殊属性,因此会生成警告。
您可以使用typedef
typedef __attribute__ ((unused)) struct St ArrayOneSt[1];
...
void func2() {
ArrayOneSt s; // No warning
}
答案 1 :(得分:3)
此属性应应用于变量不 struct
定义。
将其更改为
void func2()
{
__attribute__ ((unused)) struct St s[1];
}
将完成这项工作。