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

ant*_*009 26 c enums

gcc 4.4.1 c89

我有以下代码:

static enum states
{
    ACTIVE,
    RUNNING,
    STOPPED,
    IDLE
};
Run Code Online (Sandbox Code Playgroud)

我收到警告:

useless class storage specifier in empty declaration
Run Code Online (Sandbox Code Playgroud)

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

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

-Wall -Wextra
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议,

tva*_*son 26

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


CB *_*ley 13

您的enum声明定义了一个类型,但它也没有声明该类型的对象.

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


Joh*_*itb 6

你想要静态做什么?它服务于那里给出声明内部链接中定义的变量:

static enum states { ... } a;
Run Code Online (Sandbox Code Playgroud)

作为捷径

enum states { ... };
static enum states a;
Run Code Online (Sandbox Code Playgroud)

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


小智 6

尝试:

static enum states
{
    ACTIVE,
    RUNNING,
    STOPPED,
    IDLE
} avar;
Run Code Online (Sandbox Code Playgroud)

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