nutzloser Klassenspeicherbezeichner in leerer Deklaration
Lesezeit: 2 Minuten
Ameise2009
gcc 4.4.1 c89
Ich habe folgenden Code:
static enum states
{
ACTIVE,
RUNNING,
STOPPED,
IDLE
};
Und ich bekomme eine Warnung:
useless class storage specifier in empty declaration
Wenn ich jedoch das statische Schlüsselwort entferne, erhalte ich diese Warnung nicht.
Ich kompiliere mit den folgenden Flags:
-Wall -Wextra
Vielen Dank für Anregungen,
Sollte es nicht eine geben ; nach dem } (wahrscheinlich nicht verwandt, dachte nur, ich erwähne es)
– Andreas Brink
30. April 2010 um 10:53 Uhr
Vermutlich war der Fehler “nutzlos”, wie Sie es im Titel der Frage haben, und nicht “es sei denn”, wie Sie es in Ihrem Frage-‘Körper’ haben.
– CB Bailey
30. April 2010 um 10:56 Uhr
@Andreas – Behoben, genau dort, wo ich es in die Frage eingegeben habe.
– Ameise2009
30. April 2010 um 11:15 Uhr
Sie erhalten die Nachricht, weil Sie es eigentlich nicht sind erklärenDu bist nur definieren etwas, nämlich eine Aufzählung namens “states”. Sie können diese Definition später verwenden, um eine Variable dieses Typs zu deklarieren. Diese Variable kann eine statische Variable oder eine Instanzvariable sein, aber die Definition benötigt keinen (und sollte keinen) angehängten Speicherbezeichner.
Dein enum -Deklaration definiert einen Typ, deklariert jedoch nicht auch ein Objekt dieses Typs.
static gilt nur für Variablen und Funktionen, so dass es, wie der Compiler sagt, in dem Kontext, in dem Sie es haben, nutzlos ist.
Was soll die Statik machen? Sie dient dort dazu, in der Deklaration definierten Variablen interne Verknüpfungen zu geben:
static enum states { ... } a;
Als Abkürzung für
enum states { ... };
static enum states a;
Geben Sie “eine” interne Verknüpfung. Aber da Sie dort in Ihrem Code keine Variable definieren, ist sie tatsächlich nutzlos (wenn nicht illegal).
Versuchen:
static enum states
{
ACTIVE,
RUNNING,
STOPPED,
IDLE
} avar;
was tatsächlich eine statische Variable namens avar erstellt. Nur Variablen können statisch sein, keine Typen.
13854100cookie-checknutzloser Klassenspeicherbezeichner in leerer Deklarationyes
Sollte es nicht eine geben
;
nach dem}
(wahrscheinlich nicht verwandt, dachte nur, ich erwähne es)– Andreas Brink
30. April 2010 um 10:53 Uhr
Vermutlich war der Fehler “nutzlos”, wie Sie es im Titel der Frage haben, und nicht “es sei denn”, wie Sie es in Ihrem Frage-‘Körper’ haben.
– CB Bailey
30. April 2010 um 10:56 Uhr
@Andreas – Behoben, genau dort, wo ich es in die Frage eingegeben habe.
– Ameise2009
30. April 2010 um 11:15 Uhr