Ich mache Embedded ARM-Programmierung mit gcc 4.9. Ich habe den Schalter -Wconversion
verwendet, weil er in der Standard-Dev-Tool-Konfiguration meines Unternehmens ist. Ich benutze die stdint.h types (uint8_t, uint32_t, etc).Verwenden von Typecasting zum Entfernen von GCC-Compiler-Warnungen
Der Compiler erstellt Warnungen jedes Mal, wenn ich eine zusammengesetzte Zuweisung oder sogar einfache Addition durchführen. Zum Beispiel:
uint8_t u8 = 0;
uint16_t u16;
// These cause warnings:
u8 += 2;
u8 = u16 >> 8;
Die „übliche Methode“, dies zu beheben ist Abgüsse zu verwenden, wie here und here diskutiert:
u8 = (uint8_t)(u8 + 2);
u8 = (uint8_t)(u16 >> 8);
Zusätzlich dazu ist hässlich, ich immer in überzeugenden Beweis ausgeführt wird, Casting ist in der Regel eine schlechte Übung.
Meine Fragen:
- Warum ist es schlecht Typumwandlungen auf diese Weise zu benutzen?
- Verliere ich alles, indem ich einfach
-Wconversion
weglasse und den Compiler implizite Konvertierungen für mich machen lasse?
In diesem Fall gibt es nichts Schlimmes an der Typisierung. Wenn überhaupt, zeigt es, dass Sie die Semantik, die arithmetische Wrap-around-Funktion, die Trunkierung usw. berücksichtigt haben - und Sie sind damit zufrieden. –
@BrettHale, mindestens behauptet der Cast *, dass Sie alle Implikationen berücksichtigt haben und mit ihnen zufrieden sind. Selbst wenn Sie nicht oder nicht haben. –
@BrettHale, könnten Sie die Besetzung dort setzen, wenn Sie mehr über das Schließen des Compilers als über möglichen fehlerhaften Code interessieren (nicht spotten - es geschieht). Sie könnten es auch tun, wenn Sie glauben, Sie hätten alle Konsequenzen berücksichtigt, aber Sie irren sich. Oder auch wenn Sie es einfach nicht besser wissen. Ich stimme zu, dass das Casting nicht von Natur aus, notwendigerweise * schlecht * ist, aber die Notwendigkeit zu vermeiden, an erster Stelle zu wirken, ist * besser *. –