空声明中无用的类存储说明符

时间:2010-04-30 10:50:49

标签: c enums

gcc 4.4.1 c89

我有以下代码:

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

我收到警告:

useless class storage specifier in empty declaration

但是,如果我删除静态关键字,我就不会收到警告。

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

-Wall -Wextra

非常感谢任何建议,

4 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:13)

您的enum声明正在定义一种类型,但它也没有声明该类型的对象。

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

答案 2 :(得分:6)

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

static enum states { ... } a;

作为

的捷径
enum states { ... };
static enum states a;

给予“一个”内部联系。但是,由于您没有在代码中定义变量,因此实际上它是无用的(如果不是非法的话)。

答案 3 :(得分:6)

尝试:

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

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