【发布时间】:2010-02-10 05:52:04
【问题描述】:
我在 PIC32MX 系列微处理器上使用 HiTech PICC32,但我认为这个问题对于任何熟悉 C 语言的人来说都足够普遍。(这几乎等同于 C90,sizeof(int) = sizeof(long) = sizeof(float) = 4.)
假设我读取了一个代表float 的 4 字节数据字。我可以使用以下方法快速将其转换为实际浮点值:
#define FLOAT_FROM_WORD(WORD_VALUE) (*((float*) &(WORD_VALUE)))
但这仅适用于左值。例如,我不能在函数返回值上使用它:
FLOAT_FROM_WORD(eeprom_read_word(addr));
是否有一种简单而有效的内联方式,即没有函数调用或临时变量?老实说,我没有理由避免函数调用或额外的 var,但这让我很烦恼。一定有我想念的方法。
补充:我没有意识到WORD实际上是一个常见的typedef。我已更改宏参数的名称以避免混淆。
【问题讨论】:
-
"但这仅适用于右值" 你是说左值吗?无论如何,通过优化,您的编译器无论如何都应该删除函数调用;只需将其粘贴在一个函数中,然后查看程序集即可。
-
更正了 [l/r] 值的东西。稍后会看组装。
-
我建议你把这种东西放在一个特定于平台的包装函数中,以将这个特定于平台的代码限制在你项目的一小部分。
-
都是平台特定的——这段代码是专门为 PIC32MX[3/4]60F512L 编写的。
标签: c embedded type-punning