www.mikrocontroller.net

Forum: Compiler & IDEs GCC Warnungen


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei:

typedef enum
{
    IDLE,
    ALARM,
} EVENT;

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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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'

Autor: Thorsten (Gast)
Datum:

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

Danke trotzdem!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.