gcc 4.4.1 c89
我有以下代码:
static enum states
{
ACTIVE,
RUNNING,
STOPPED,
IDLE
};
我收到警告:
useless class storage specifier in empty declaration
但是,如果我删除静态关键字,我就不会收到警告。
我正在使用以下标志进行编译:
-Wall -Wextra
非常感谢任何建议,
答案 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的静态变量。只有变量可以是静态的,而不是类型。