enum als Rückgabewert einer Funktion

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

Meine Funktion mit der State Machine hat dieses enum nun als 
Rückgabewert:
1
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.
Moderator Persönliche Seite
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.
Gast
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.