nutzloser Klassenspeicherbezeichner in leerer Deklaration

Lesezeit: 2 Minuten

Benutzer-Avatar
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.

1385410cookie-checknutzloser Klassenspeicherbezeichner in leerer Deklaration

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy