Looking at this answer e sapendo che 0 is an octal constant:Does size_t foo = 0; hai bisogno di un cast?
Per esadecimale [costanti [e ottale in base ai commenti]], è il primo tipo il valore può andare bene in:
int
,unsigned int
,long
,unsigned long
,long long
,unsigned long long
Pertanto, io deduco questo non ha bisogno di un cast:
size_t foo = 0;
Tuttavia, a causa di un severo strumento MISRA-C, restituisco un messaggio su una conversione di tipo implicito illegale - MISRA-C: 2004 Rule 10.1.
La mia comprensione è errata oppure lo strumento è in errore?
(NB:. Ho cambiato a size_t foo = 0U;
come che è molto più semplice di discutere con QA, ma mi piacerebbe soddisfare la mia curiosità)
Come si definisce "bisogno di un cast"? C'è una conversione implicita e MISRA te ne parla. – juanchopanza
Inoltre, dal momento che hai taggato la domanda C, e non C++, ecco [una domanda sul fatto che '0 'è ottale in C] (http://stackoverflow.com/questions/26625311/is-0-an-otale-or- un decimale-in-c /). – juanchopanza
Una costante decimale non avrebbe bisogno di un cast neanche; qualsiasi tipo aritmetico può essere implicitamente convertito in qualsiasi altro tipo aritmetico. Ma 'size_t foo = 0U;' può anche implicare una conversione implicita; '0U' è di tipo' unsigned int', che può o meno essere dello stesso tipo di 'size_t'. (E se MISRA richiede un cast, MISRA è stupido.) –