Uwe S. schrieb:
> Hallo,
>
> das ist ein Beispiel und der Compiler legt hier keine Variablen an, da
> sie vom type "const" sind - also unveränderlich !
Mit dem const versprichst du dem Compiler, daß du sie nicht änderst,
aber Variablen sind es trotzdem. In C gibt es keine echten Konstanten.
Das ist ja auch der Grund, warum man meistens Makros benutzt und eben
nicht const.
> Der Vorteil ist, man(n) sieht sofort die Datentypen und der Compiler ist
> in der Lage einen Typeüberprüfung durch zu führen.
Auch bei einem #define hat der Wert einen Typ, also kann der Compiler
den auch prüfen, genauso, als ob es eine Variable wäre. Man sieht der
Makro-Definition den Typ vielleicht nicht unbedingt so leicht an, was
man aber mit einem Cast beheben könnte. Den hat dein Beispiel eh schon.
Das könnte mit einem #define so aussehen:
1 | #define UBRR (uint16_t) (1.0 * F_CPU / 16 / BAUDRATE -0.5)
|
Da erkennt man den Typ genauso schnell wie bei deinem
1 | const uint16_t UBRR = (uint16_t)(1.0 * F_CPU / 16 / BAUDRATE -0.5);
|
> Ich denke, diese Umstände waren Dir nicht bekannt.
Mir sind die Umstände schon bekannt, dir aber anscheinend nicht so ganz.