www.mikrocontroller.net

Forum: Compiler & IDEs enum als Rückgabewert einer Funktion


Autor: enum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir einen enum Datentyp wie folgt erstellt:
typedef enum {
  SMS_OK,      // OK von Mobiltelefon empfangen
  SMS_ERROR,    // ERROR von Mobiltelefon empgangen
  SMS_MSG_DECODE,    // Textnachricht eingegangen, decodiert und in SMS_DECODE_DATA_TYPE Struktur gespeichert
  SMS_INCOMING_RING,  // eingehender Anruf
  SMS_CANCEL_RING,  // eingehender Anruf wurde abgewiesen
  SMS_REQUEST_TELNR,  // Telefonnummer des eingehenden Anruft wurde abgefragt
  SMS_RETRIEVE_TELNR,  // Anrufer wurde abgewiesen, Telefonnummer ermittelt und korrekt mit sms_telnr verglichen
  SMS_IDLE,    // empfangene Zeichenkette wurde nicht in sms_state_machine "gefunden" (kein Eintrag)
} SMS_MSG;

Meine Funktion mit der State Machine hat dieses enum nun als 
Rückgabewert:
extern SMS_MSG sms_state_machine(void);

Ich kann nun also in der Funktion sms_state_machine Rückgabewerte der 
Form "return SMS_OK" nutzten und würde dementsprechend eine 0 
zurückerhalten.

Ist es nun möglich, die Rückgabewerte auf diesen enum Typ zu 
beschränken??
Mein Problem ist, dass "return SMS_OK123" keine Fehlermeldung oder 
Warning bringt, obwohl der Compiler SMS_OK123 gar nicht kennen kann. Ich 
brauche eigentlich nur eine Felermeldung/Warning, damit ich weiss, dass 
ich mich verschrieben habe.

Ich nutzt zur Zeit AVR Studio 4.17 Build6 66 und WINavr-20090313.

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

Bewertung
0 lesenswert
nicht lesenswert
enum schrieb:
> Ist es nun möglich, die Rückgabewerte auf diesen enum Typ zu
> beschränken??

Nein, in C ist ein enum weiter nichts als ein int.

> Mein Problem ist, dass "return SMS_OK123" keine Fehlermeldung oder
> Warning bringt, obwohl der Compiler SMS_OK123 gar nicht kennen kann.

Kann nicht sein.  Wenn er SMS_OK123 nicht kennt, kann er dafür auch
keinen Wert ermitteln, das ergibt zwangsläufig einen Fehler.

Wogegen du dich aber nicht schützen kannst ist, dass jemand

return 42;

schreibt.

Autor: enum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den integer war mir klar. Aber ich habe gerade festgestellt, 
dass mein AVR Studio nicht ganz stimmen kann. Selbst wenn ich 
irgendwelche Variablen wild umbenenne (die nicht existieren) oder neue 
erfinde, kommt keine Fehlermeldung. Da stimmt irgendwas nicht.

Autor: enum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, selbst nach Neustart hat nichts geklappt. Kurzerhand ein anderes 
Projekt geöffnet und dort klappt alles. Also nun wieder zum 
Originalprojekt, probiert und siehe da, nun geht's wieder.

SRY also für den Beitrag. Keine Ahnung woran da nun lag.

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.