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


von enum (Gast)


Lesenswert?

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.

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


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.

von enum (Gast)


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.

von enum (Gast)


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.

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.