Warum produziert mir der SDCC mit folgendem Code ein
warning 158: overflow in implicit constant conversion
der arm-none-eabi-gcc hingegen nicht ?
1 | #define delay_flag 0x80
|
2 |
|
3 | static const uint8_t init_seq[] =
|
4 | {
|
5 | 0x3a, 1 + delay_flag, 0x05,10
|
6 | }
|
Mir ist natürlich klar, dass das delay_flag eben keinen Cast auf uint8_t
hat, aber erklärt das, warum ein Compiler eine Warnung ausgibt, ein
anderer hingegen nicht.
Außerdem:
Ein:
1 | 0x3a, 1 | delay_flag, 0x05,10
|
bringt die Warnung zum "schweigen", aber irgendwie gefällt mir die
Darstellung deswegen nicht, weil wie im obigen Beispiel die 1 die Anzahl
der folgenden Parameter ist und das letzte Byte im Array eine
Verzoegerungszeit. Das delay_flag sagt hier nur, dass nach Abschluss
eines Datenframes eine Wartezeit einzuhalten ist. Ich bin der Meinung,
dass 1 + delay_flag einfach besser lesbar ist (und wie gesagt, der GCC
bringt diese Warnung nicht).
Würdet ihr die Warnung ignorieren wenn ihr genau wüßtet was damit
gemeint ist (vor allen Dingen dann, wenn der Code weitergegeben wird)
oder doch die logische ODER-Verknüpfung verwenden ?