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

问题描述 投票:0回答:1
  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,
  }; 

有人可以解释这是怎么回事吗?

c struct static
1个回答
1
投票
static struct s { int a; };

相当于:

struct s {
    int a;
};

它定义了结构s,但未声明任何变量。也就是说,没有与之关联的存储,因此没有可将static应用于的内容。

但是如果您这样做:

static struct s { int a; } x;

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

类似地,如果先前已定义struct s,则可以执行:

static struct s x;

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

© www.soinside.com 2019 - 2024. All rights reserved.