【问题标题】:useless class storage specifier in empty declaration空声明中无用的类存储说明符
【发布时间】:2010-04-30 10:50:48
【问题描述】:

gcc 4.4.1 c89

我有以下代码:

static enum states
{
    ACTIVE,
    RUNNING,
    STOPPED,
    IDLE
};

我收到警告:

useless class storage specifier in empty declaration

但是,如果我删除 static 关键字,我不会收到该警告。

我正在使用以下标志进行编译:

-Wall -Wextra

非常感谢您的任何建议,

【问题讨论】:

  • }之后不应该有;(可能不相关,只是想我会提一下)
  • 可能错误是问题标题中的“无用”,而不是问题“正文”中的“除非”。
  • @Andreas - 已修复,就在我在问题中输入的位置。

标签: c enums


【解决方案1】:

您收到消息是因为您实际上并没有声明,您只是定义一些东西,即一个名为“states”的枚举。您可以稍后使用此定义来声明该类型的变量。该变量可能是静态变量或实例变量,但定义不需要(也不应该有)附加到它的存储说明符。

【讨论】:

    【解决方案2】:

    您的enum 声明定义了一个类型,但它并未同时声明该类型的对象。

    static 仅适用于变量和函数,因此正如编译器所说,它在你拥有它的上下文中是无用的。

    【讨论】:

      【解决方案3】:

      你想要静态做什么?它在那里提供在声明内部链接中定义的变量:

      static enum states { ... } a;
      

      作为快捷方式

      enum states { ... };
      static enum states a;
      

      给出“a”内部链接。但是由于您没有在代码中定义变量,实际上它是无用的(如果不是非法的话)。

      【讨论】:

        【解决方案4】:

        试试:

        static enum states
        {
            ACTIVE,
            RUNNING,
            STOPPED,
            IDLE
        } avar;
        

        它实际上创建了一个名为 avar 的静态变量。只有变量可以是静态的,不能是类型。

        【讨论】:

          猜你喜欢
          • 2016-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多