msc*_*msc 2 c arrays gcc struct unused-variables
这里使用了unused属性和结构.
根据GCC文件:
没用过 :
附加到变量的此属性表示该变量可能未使用.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;
}
Run Code Online (Sandbox Code Playgroud)
为什么GCC会为结构数组生成警告?
您没有将属性附加到变量,而是将其附加到类型.在这种情况下,适用不同的规则:
当附加到类型(包括a
union或astruct)时,此[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
}
Run Code Online (Sandbox Code Playgroud)