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

C 空声明中无用的类存储说明符,c,enums,C,Enums,通用条款4.4.1 c89 我有以下代码: static enum states { ACTIVE, RUNNING, STOPPED, IDLE }; 我得到一个警告: useless class storage specifier in empty declaration 但是,如果我删除static关键字,就不会得到警告 我使用以下标志进行编译: -Wall -Wextra 非常感谢您的建议,您希望static做什么?它用于提供声明内部链接中定义的变量

通用条款4.4.1 c89

我有以下代码:

static enum states
{
    ACTIVE,
    RUNNING,
    STOPPED,
    IDLE
};
我得到一个警告:

useless class storage specifier in empty declaration
但是,如果我删除static关键字,就不会得到警告

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

-Wall -Wextra

非常感谢您的建议,

您希望static做什么?它用于提供声明内部链接中定义的变量:

static enum states { ... } a;
作为一条捷径

enum states { ... };
static enum states a;
提供“a”内部链接。但是,由于您没有在代码中定义变量,它实际上是无用的(如果不是非法的话)。

试试:

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

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

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


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

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

是否应该有
}
之后(可能没有关系,我只是想提一下)大概错误是“无用”的,就像你在问题标题中所说的那样,而不是像你在问题“正文”中所说的“除非”。@Andreas-修复了我在问题中键入的错误。