Forum: Compiler & IDEs GCC Warnungen


von Thorsten (Gast)


Lesenswert?

Hallo zusammen,

ich möchte bei folgendem Konstrukt eine Warnung vom Compiler erhalten:

typedef enum
{
    IDLE,
    ALARM,
} EVENT;

typedef struct
{
    EVENT event;
} test_struct;

test_struct Test;

Test.event = IDLE;   // das ist okay
Test.event = 1;      // hier soll es mind. eine Warnung geben

Ich habe mich schon durch die Dokumenation der Warnungskommandos für
den Compiler gearbeitet, aber nichts gefunden. Vielleicht, oder
hoffentlich, auch überlesen.

Weiß einer von Euch weiter?

Vielen Dank und Mahlzeit!

von Mathias (Gast)


Lesenswert?

Bei:

typedef enum
{
    IDLE,
    ALARM,
} EVENT;

gibt nicht einmal der Keil eine Warnung aus... hat aber auch keine
Probleme damit

von Thorsten (Gast)


Lesenswert?

Bei meiner Beispielzeile

Test.Event = 1;

generiert der Visual C++ Compiler von Microsoft einen Fehler und der
IAR Workbench Compiler für den M16C wenigstens eine Warnung, beides
nach dem Motto "Typ bei Zuweisung stimmt nicht".

Ich finde das bei komplexen Konstrukten (große State Machines etc) sehr
hilfreich.

So eine Typüberwachung muss doch auch beim GCC aktivierbar sein, oder?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das geht bei C nicht, nur bei C++.  Bei C ist ein enum (per
definitionem) zuweisungskompatibel mit dem Typ "int".

Wenn du den GCC im C++-Modus betreibst, generiert er
ordnungsgemäß einen Fehler:

j@ida 635% avr-gcc -Wall -x c -c foo.c
j@ida 636% avr-gcc -Wall -x c++ -c foo.c
foo.c: In function `void foo()':
foo.c:17: error: invalid conversion from `int' to `EVENT'

von Thorsten (Gast)


Lesenswert?

Mmmh, das wusste ich gar nicht...
Auf jeden Fall hast Du recht.

Danke trotzdem!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.