可变参数列表中有哪些types的默认促销?
例如,我在C ++中使用8位CPU(AVR)的printf
函数。 下面的代码是安全的:
uint8_t a = 5; printf("%d", a);
这里%d
期望int
(16位在我的情况下,至less16位在任何情况下),但我通过8位整数。
C / C ++标准是否保证任何types小于int
types都被提升为int
?
float a
和%f
问题相同,需要double
和其他类似的types。
查看n1256(带有技术勘误表TC1,TC2和TC3的C99) 6.5.2.2 Function calls
:
对于没有原型的函数或与省略号相对应的参数,将执行默认参数促销。
那些是:默认的整数促销和float
推广double
。
默认整数升级:每一个小于int
整数types都被提升为int
或unsigned int
。