Forum: Compiler & IDEs Prototyp / Funktionsdefinition ohne standard qualifier


von Paul (Gast)


Lesenswert?

Ich bin etwas ratlos. Ich versuche zu verstehen, wie diese Funktion 
angewendet werden soll:

ErrorStatus RTC_DeInit(void);

ErrorStatus ist ja kein qualifier, wie ich es sonst kenne. Kann mir das 
jemand erklären?


typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;

von g457 (Gast)


Lesenswert?

> ErrorStatus ist ja kein qualifier, wie ich es sonst kenne.

Das ist das das wo zurückkommt als Ergebnis.

> Kann mir das jemand erklären?

Jedes x-beliebige Buch über C.

von Karl H. (kbuchegg)


Lesenswert?

Paul schrieb:

> ErrorStatus RTC_DeInit(void);
>
> ErrorStatus ist ja kein qualifier

wieso Qualifier? Wo soll da ein Qualifier im Spiel sein?
ErrorStatus ist ein Datentyp wie jeder andere, zb int, oder double. 
Diese Funktion liefert dann eben keinen int oder double sondern einen 
ErrorStatus.

Und das wiederrum ist ein enum, wie du ja selbst angegeben hast.

Ev. doch mal einen Blick in ein C-Buch riskieren?

von Paul (Gast)


Lesenswert?

Jo. Danke für die Antworten. Habe es inzwischen selber kapiert. Bin halt 
ein Noop ...

von Rainer Dünsch (Gast)


Lesenswert?

Noop schreibt man mit b am ende, du noob :)

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


Lesenswert?

Paul schrieb:
> typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;

Die Definition für "SUCCESS" ist Nonsense.

Schreib das besser so:
1
typedef enum {
2
  ERROR, SUCCESS
3
} ErrorStatus;

Die beiden sich ergebenden Werte (0 für "ERROR", 1 für "SUCCESS") sind
wohl definiert und entsprechen komplett dem kryptischen
Ausrufezeichenhumbug da oben.

(Ich weiß, kommt sicher nicht von dir, aber da wollte jemand wohl ganz
besonders "flexibel" sein und hat eine Definition verbrochen, die
letztlich nur besonders kompliziert ist, ohne irgendeinen wirklichen
Gewinn an "Flexibilität" zu haben.)

von Peter D. (peda)


Lesenswert?

Jörg Wunsch schrieb:
> Die Definition für "SUCCESS" ist Nonsense.

Nicht unbedingt.
Mancher verwendet eben für SUCCESS TRUE und mancher FALSE.
Beides hat seine Berechtigung.
TRUE ist logischer, FALSE erlaubt den Fehler genauer zu spezifizieren.

Wenn ich LEDs gegen VCC habe, schreibe ich auch:
1
#define LED_ON  0
2
#define LED_OFF !LED_ON
Und wenn sich die Schaltung ändert, muß ich nur ein Define ändern.
Z.B. ich teste auf dem STK500, im Gerät sind die LEDs aber gegen GND.

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


Lesenswert?

Peter Dannegger schrieb:
> Und wenn sich die Schaltung ändert, muß ich nur ein Define ändern.

Naja, das ist ein lahmes Argument, da die zwei Zeilen ja ohnehin
hintereinander sind. ;-)

In aller Regel steckt da eher die Unsicherheit dahinter: "ich weiß
doch gar nicht, welchen Wert die logische Negation von 0 bei einem
anderen Compiler ergibt", obwohl eben dieser Wert ganz klipp und klar
als 1 definiert ist.

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.