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

10 c c++ variadic-functions

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

uint8_t a = 5;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

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

C/C++标准是否保证任何类型的等级小于int升级int

同样的问题float a%f期望double,以及其他类似的类型.

Ded*_*tor 14

看在草案n1256(C99与技术勘误TC1,TC2,TC3和包括)6.5.2.2 Function calls:

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

这些都是:默认整数促销和推广floatdouble.

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