可变参数列表中有哪些types的默认促销?

例如,我在C ++中使用8位CPU(AVR)的printf函数。 下面的代码是安全的:

 uint8_t a = 5; printf("%d", a); 

这里%d期望int (16位在我的情况下,至less16位在任何情况下),但我通过8位整数。

C / C ++标准是否保证任何types小于inttypes都被提升为int

float a%f问题相同,需要double和其他类似的types。

查看n1256(带有技术勘误表TC1,TC2和TC3的C99) 6.5.2.2 Function calls

对于没有原型的函数或与省略号相对应的参数,将执行默认参数促销。

那些是:默认的整数促销和float推广double

默认整数升级:每一个小于int整数types都被提升为intunsigned int