Sto facendo programmazione ARM incorporata con gcc 4.9. Ho utilizzato lo switch -Wconversion
perché si trova nella configurazione dello strumento di sviluppo predefinito della mia azienda. Sto usando lo stdint.h types (uint8_t, uint32_t, ecc.).Utilizzo di typecasting per rimuovere gli avvisi del compilatore gcc
Il compilatore crea avvisi ogni volta che eseguo un'assegnazione composta o anche un'aggiunta semplice. Per esempio:
uint8_t u8 = 0;
uint16_t u16;
// These cause warnings:
u8 += 2;
u8 = u16 >> 8;
Il "metodo comune" per risolvere questo problema è quello di utilizzare calchi, come discusso here e here:
u8 = (uint8_t)(u8 + 2);
u8 = (uint8_t)(u16 >> 8);
Oltre a questo essere brutto, io continuo a correre in prove convincenti che il casting è generalmente una cattiva pratica.
Le mie domande:
- Perché è brutto da usare typecasts in questo modo?
- Perdo qualcosa semplicemente omettendo
-Wconversion
e lasciando che il compilatore esegua conversioni implicite per me?
In questo caso non c'è niente di "cattivo" nel typecasting. Se non altro, mostra che hai considerato la semantica, l'aritmetica avvolgente, il troncamento, ecc. E ne sei soddisfatto. –
@BrettHale, almeno il cast * afferma * di aver preso in considerazione tutte le implicazioni e di esserne soddisfatto. Anche se non l'hai fatto o no. –
@BrettHale, si potrebbe mettere il cast lì se ci si preoccupa di più di chiudere il compilatore rispetto a un possibile codice errato (non fare lo scherno - succede). Potresti farlo anche se pensi di aver preso in considerazione tutte le implicazioni, ma ti sbagli. O anche se non lo sai meglio. Sono d'accordo sul fatto che il casting non è intrinsecamente, necessariamente * cattivo *, ma evitare la necessità di eseguire il cast in primo luogo è * migliore *. –