【发布时间】:2020-10-23 08:29:37
【问题描述】:
在 QEMU edu PCI 设备的sourcecode 中,用 C 编写,进行了以下分配:
val = 0x010000edu;
(在documentation中也有说明)。
这应该是存储在设备内部寄存器中的值,偏移量为0x00(第一个)。 u 不是十六进制值。实际上从操作系统读取寄存器的内容,只显示0x010000ed。
上面的赋值val = 0x010000edu似乎毫无意义。那么,为什么会这样呢?
在一个测试程序中,我可以:
# include <stdio.h>
# include <inttypes.h>
void main() {
uint32_t testvalue = 0x010000edu;
printf("%08x\n", testvalue);
}
它成功编译并在屏幕上打印001000ed。但是:
uint32_t testvalue = 0x010u00ed;
会引发编译器错误:
test.c: In function ‘main’:
test.c:9:19: error: invalid suffix "u00ed" on integer constant
9 | uint32_t testvalue = 0x010u00ed;
| ^~~~~~~~~~
我不明白为什么u 在这两种情况下都没有被拒绝,因为它不是hex 数字。
【问题讨论】:
-
我不明白。您是否仅对
u后缀感到困惑?还是你问0x010000ed值是什么意思?seems meaningless.为什么?它将0x010000ed分配给变量val,似乎在做一些有意义的事情。 -
@KamilCuk 我对十六进制表达式上出现
u感到困惑。u不是十六进制数字...
标签: c hex variable-assignment qemu pci