可变参数列表中有哪些类型的默认升级
What default promotions of types are there in the variadic arguments list?
例如,我在 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
的每个整数类型都将提升为 int
或 unsigned int
。
相关文章:
- 具有默认模板类型的默认构造函数的类型推导
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 模板类默认类型和条件
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- 为什么 std::optional::value_or 没有默认 ctor 类型的专用化?
- 静态私有函数,模板化类型作为C++中的默认参数
- 当为模板参数提供默认参数时,VS 2017无法正确找到以前定义的类型
- 具有默认类型和值的模板参数
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 在一行中将默认类型值上的指针作为参数传递
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- 使用返回不完整类型的函数作为默认参数
- 更改代码::块上的默认保存文件类型
- 构造函数可以更改默认成员类型吗?
- 检测习惯用语和默认参数类型匹配