可变参数列表中有哪些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都被提升为int或unsigned int 。