可变参数列表中有哪些类型的默认升级

What default promotions of types are there in the variadic arguments list?

本文关键字:类型 默认 参数 变参 列表      更新时间:2023-10-16

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

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

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

C/C++标准是否保证任何等级低于int晋升为int的类型?

对于期望double和其他类似类型的float a%f,同样的问题。

在草案

n1256(C99 包含技术勘误 TC1、TC2 和 TC3)中查找6.5.2.2 Function calls

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

它们是:默认整数升级和将float提升到double

默认整数升级:排名小于 int 的每个整数类型都将提升为 intunsigned int