为什么"unused attribute"会为struct数组生成警告?

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会为结构数组生成警告?

das*_*ght 9

您没有将属性附加到变量,而是将其附加到类型.在这种情况下,适用不同的规则:

当附加到类型(包括a union或a 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
}
Run Code Online (Sandbox Code Playgroud)

演示.