Forum: Compiler & IDEs Enum in Parameterliste


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,
ich bin mal wieder auf dem best practices -Trip.

Zuerst hielt ich es für eine super-Idee, für boolesche Werte Enums zu 
verwenden, weil die Werte dann vielsagender sind und von meiner IDE 
schon per Auto-Vervollständigen vorgeschlagen werden:
1
    uint_fast8_t I2C_Sendbuffer(I2C_TypeDef *I2Cx, uint8_t slaveaddr,
2
          uint8_t* pBuffer, uint8_t nBuffer, enum stopbit_t {noStop, stop} stopbit);
Die Warnings im ARM-GCC sagen mir aber, daß es wohl keine gute Idee war:
1
warning: 'enum stopbit_t' declared inside parameter list 
2
warning: its scope is only this definition or declaration, which is probably not what you want
Aber was ist in der Hinsicht eine gute Idee?

Klar- ich kann stopbit_t einfach per typedef darüberschreiben.

Aber wie macht man es "richtig" ?

Viele Grüße
W.T.

von Karl H. (kbuchegg)


Lesenswert?

Walter Tarpan schrieb:

> Aber was ist in der Hinsicht eine gute Idee?

steht doch dort.
Den enum nicht in der Argumentliste einer Funktionsdefinition zu 
definieren

(wusste gar nicht, dass das überhaupt geht.)

>
> Klar- ich kann stopbit_t einfach per typedef darüberschreiben.
>
> Aber wie macht man es "richtig" ?

Nicht in der Funktionsdefinition definieren, sondern getrennt davon. Ob 
mit oder ohne typedef ist dabei zweitrangig.
1
enum stopbit_t { noStop, stop };
2
3
    uint_fast8_t I2C_Sendbuffer(I2C_TypeDef *I2Cx, uint8_t slaveaddr,
4
          uint8_t* pBuffer, uint8_t nBuffer, enum stopbit_t stopbit);


Es ist höchst selten, dass man derartige 'benannten Werte' nur an einer 
Stelle im Code braucht. Der wesentlich häufigere Fall ist wohl, dass 
diese Dinge an mehreren STellen im Code auftauchen.

: Bearbeitet durch User
von Walter Tarpan (Gast)


Lesenswert?

Hallo Karl-Heinz,

danke für die schnelle Antwort. Manchmal ist der einfachste Weg doch der 
sinnvolle.

Karl Heinz schrieb:
> (wusste gar nicht, dass das überhaupt geht.)

Walter Tarpan schrieb:
> warning: its scope is only this definition or declaration, which is
> probably not what you want

Wenn man den Warnungen glauben schenkt, macht es wohl auch nicht das, 
was ich mir davon versprochen habe.

Aber Du hast Recht: Wenn ich das nicht über Typedef, sondern über ein 
benanntes Enum mache, sieht man auch in jeder Deklaration, daß es ein 
Enum ist und das Auto-Vervollständigen sagt mir die erlaubten Werte. Das 
finde ich sehr gut lesbar.

Viele Grüße
W.T.

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.