1

今天,我遇到了 ARM 工具链 EABI(交叉编译器)的一些奇怪问题。

这个问题是当我尝试使用 snwprintf() 将浮点值转换为字符串时,我得到了一些没有实际浮点值的垃圾字符串。

示例代码看起来像这样:

float floatValue = 1.0;
snwprintf (buffer, bufferSize, _T("%g"), floatValue);

然后我调试了 snwprintf,发现变量参数列表(va_arg)没有指向确切的数据值。通过转储内存,我们能够找到变量参数列表中存在的确切数据。va_arg 应该指向的数据不同。

我不认为这是一个字节序问题,因为整数值工作正常。问题仅在于双值。

任何人都可以在这个问题上帮助我吗?

4

1 回答 1

1

您应该将其格式化/打印为双精度,因为对于可变参数函数,浮点数已扩大到双精度。

ARM 体系结构的过程调用标准声明如下

5.5 参数传递
可变参数函数总是按照基本标准进行编组。

7.2 参数传递约定
对于可变参数函数,匹配省略号 (...) 的浮点参数被转换为 double 类型。

Afaik 7.2 一般适用于 C。

于 2012-10-12T06:10:08.957 回答