Quali promozioni predefinite di tipi ci sono nella lista degli argomenti variadici?

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 .