Enum in Parameterliste

#3611931
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.
#3611942
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.
Gast #3612342
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren