2010-04-30 9 views
25

gcc 4.4.1 c89nutzlos Klasse Speicher Spezifizierer in leere Deklaration

Ich habe den folgenden Code:

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

Und ich bekomme eine Warnung:

useless class storage specifier in empty declaration 

Allerdings, wenn ich entfernen Das statische Schlüsselwort Ich bekomme diese Warnung nicht.

ich mit den folgenden Flags bin Kompilieren:

-Wall -Wextra 

Vielen Dank für Ihre Anregungen,

+3

Sollte es nicht ein ';' nach dem '}' (wahrscheinlich nicht verwandt, dachte nur, ich würde es erwähnen) –

+0

Vermutlich war der Fehler "nutzlos" wie Sie in der Frage Titel und nicht "es sei denn" wie Sie in Ihrer Frage "Körper" haben. –

+0

@Andreas - Fixed, genau dort, wo ich es in der Frage eingegeben habe. – ant2009

Antwort

22

Sie erhalten die Nachricht, weil Sie nicht wirklich sind erklärt, bist du nur definieren etwas, nämlich eine Aufzählung namens „Zustände“. Sie können diese Definition später verwenden, um eine Variable dieses Typs zu deklarieren. Diese Variable kann eine statische oder Instanzvariable sein, aber die Definition muss (und sollte nicht) den Speicherspezifizierer haben.

5

Was wollen Sie die statische Aufladung zu tun? Es dient dort Variablen im Deklarations interne Bindung definiert zu geben:

static enum states { ... } a; 

Als Abkürzung für

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

Giving „um eine“ interne Bindung. Aber da Sie in Ihrem Code keine Variable definieren, ist sie tatsächlich nutzlos (wenn nicht illegal).

4

Versuche:

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

, die tatsächlich eine statische Variable avar genannt erzeugt. Nur Variablen können statisch sein, nicht Typen.

12

Ihre enum Deklaration definiert einen Typ, aber es deklariert auch kein Objekt dieses Typs.

static gilt nur für Variablen und Funktionen so, wie der Compiler sagt, es ist nutzlos in dem Kontext, in dem Sie es haben.