我正在使用的编译器(ARM 的 Codesourcery)中有一个错误会破坏 va_arg(),我正在尝试解决这个问题。在这种情况下,'ap' 是一个指向 32 位和 64 位参数列表的简单指针。编译器错误是 va_arg() 已损坏,有时会返回不正确的值。
我可以将 va_list 转换为任意类型的指针,并使用它来挑选列表中的值:
void foo(va_list ap)
{
int32_t ival;
double dval;
ival = *(int32_t*)≈
dval = *(double*)&ap);
}
但是,我如何才能将增量“ap”作为强制转换类型预先或后增加?
例如,这两个都给出错误:
(int32_t*)&ap++;
++(int32_t*)&ap.
真正的“C”大师能帮我一把吗?我有一个解决方案,它使用联合来操纵指针,但我想要一个更“c-worthy”的方法......