【发布时间】:2016-07-15 16:02:07
【问题描述】:
大小整数(来自 stdint.h 的)实际上是标准 C 类型的 typedef。因此,应用于可变参数(varargs)函数(如 printf())的“默认参数提升”也将应用于它们,以便将 char 和 short 强制转换为 int(有符号或无符号)。
我正在编写一个类似 printf 的函数,它是为大小整数设计的。它有一个格式字符串,其中包含变量参数列表中所有整数的大小信息。
我应该如何编写可变参数查询代码,以便它以正确的大小检索每个参数?我想我的函数需要知道默认参数提升,但它们是编译器/系统相关的,因为它取决于系统是否具有 16/32/64 位 int。如何以独立于编译器的方式正确获取参数?
【问题讨论】:
-
“我怎样才能以独立于编译器的方式正确地获得参数?”好吧,除了您提供的平台文档之外别无他法。
-
其实我想我明白了。你说你不能安全地做(例如)
va_arg(ap, int16_t),因为你不知道int16_t是int还是short(因此它是否会被提升)。 -
@cesss:是的,我猜你可以做
#if (sizeof(int16_t) < sizeof(int)) int16_t x = va_arg(ap, int); #else int16_t x = va_arg(ap, int16_t); #endif等等。 -
@Shark PromoType(v) 满足你的愿望吗?
-
@chux 是的 :)
标签: c variadic-functions