2010-04-30 12 views
25

gcc 4.4.1 c89inútil especificador de almacenamiento de clase en una declaración vacía

Tengo el siguiente código:

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

Y recibo una advertencia:

useless class storage specifier in empty declaration 

Sin embargo, si quito la palabra clave estática no recibo esa advertencia.

Estoy compilando con las siguientes banderas:

-Wall -Wextra 

Muchas gracias por todas las sugerencias,

+3

No debería haber un ';' después de '}' (probablemente no relacionado, solo pensé en mencionarlo) –

+0

Probablemente el error fue "inútil" como lo tiene en el título de la pregunta y no "a menos" como tienes en tu pregunta 'cuerpo'. –

+0

@Andreas - Solucionado, justo donde lo escribí en la pregunta. – ant2009

Respuesta

22

recibe el mensaje, ya que no está realmente declarar, sólo se está definiendo algo, a saber, una enumeración denominada "estados". Luego puede usar esta definición para declarar una variable de ese tipo. Esa variable puede ser una variable estática o de instancia, pero la definición no necesita (y no debería tener) el especificador de almacenamiento adjunto.

5

¿Qué desea la estática que se puede hacer? Sirve allí para dar a las variables definidas en el enlace interno declaración:

static enum states { ... } a; 

Como un acceso directo para

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

dar "un" enlace interno. Pero como no define una variable en su código, de hecho es inútil (si no es ilegal).

4

Probar:

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

que en realidad crea una variable estática denominada Avar. Solo las variables pueden ser estáticas, no tipos.

12

La declaración enum está definiendo un tipo, pero tampoco está declarando un objeto de ese tipo.

static solo se aplica a variables y funciones, por lo que, como dice el compilador, es inútil en el contexto en el que lo tiene.

Cuestiones relacionadas