空声明中的静态结构警告无用的存储类说明符

Posted

技术标签:

【中文标题】空声明中的静态结构警告无用的存储类说明符【英文标题】:Static struct warning useless storage class specifier in empty declaration 【发布时间】:2020-04-07 11:44:19 【问题描述】:
  static struct astr 
          int a;
  ;

  static const struct astr newastr = 
          .a = 9,
  ;

我得到:警告:空声明中的无用存储类说明符

如果我把它改成

  static struct astr 
          int a;
   something;

然后警告将被修复。

以下内容也没有给出警告

  struct astr 
          int a;
  ;

  static const struct astr newastr = 
          .a = 9,
  ; 

有人能解释一下这里发生了什么吗?

【问题讨论】:

结构声明的 static 说明符的目的是什么? 另见***.com/q/7259830/11336762 【参考方案1】:

当您有结构定义但未声明任何变量时,您会收到警告。例如,以下将给出警告:

static struct s 
    int a;
;

这相当于:

struct s 
    int a;
;

它定义了结构s,但没有声明任何变量。即,没有与之关联的存储,因此没有任何东西可以应用 static

但如果你这样做:

static struct s 
    int a;
 x;

然后没有警告,因为除了定义结构s之外,您还声明了变量x,因此static适用于x

同样,如果struct s之前已经定义了,你可以这样做:

static struct s x;

没有警告。当然,如果需要,您可以选择提供初始化程序。

【讨论】:

以上是关于空声明中的静态结构警告无用的存储类说明符的主要内容,如果未能解决你的问题,请参考以下文章

serializable 类 DrawImage 未声明类型为 long 的静态终态 是啥意思

静态类是不是只包含java中的静态方法?

将方法声明为静态有啥好处

在JAVA中啥是顶级类啊

Java中的静态变量实例变量和局部变量及其特征

C# 中的静态结构存储在哪里?