Ad esempio, uso la funzione printf
in C ++ per CPU 8-bit (AVR). È il seguente codice sicuro:
uint8_t a = 5; printf("%d", a);
Qui %d
aspetta int
(16 bit nel mio caso e almeno 16 bit in ogni caso), ma passo un intero di 8 bit.
Gli standard C / C ++ garantiscono che qualsiasi tipo con rank inferiore a int
promosso a int
?
La stessa domanda per float a
e %f
che si aspetta il double
e altri tipi analoghi.
Osservare la bozza n1256 (C99 con correzione tecnica TC1, TC2 e TC3 inclusi) per 6.5.2.2 Function calls
:
Per le funzioni senza prototipo o i parametri corrispondenti ai puntini di sospensione ...
, vengono eseguite le promozioni degli argomenti predefiniti.
Quelle sono: promozioni intere di default e promozione del float
da double
.
Promozioni intere predefinite: ogni tipo intero di rango inferiore a int
è promosso a int
o unsigned int
.