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

时间:2014-04-03 17:05:29

标签: c++ c variadic-functions

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

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

这里%d期望int(在我的情况下为16位,在任何情况下至少为16位),但我传递的是8位整数。

C / C ++标准是否保证排名小于int的任何类型都提升为int

float a%f预期double以及其他类似类型的问题。

1 个答案:

答案 0 :(得分:14)

查看草稿n1256 (C99 with Technical corrigenda TC1, TC2, and TC3 included)中的6.5.2.2 Function calls

对于没有原型的函数或与省略号...对应的参数,将执行默认参数提升。

这些是:floatdouble的默认整数促销和宣传。

默认整数提升:小于int的每个整数类型的提升都会提升为intunsigned int