#define MMIO_READ8(Address) (*(volatile UINT8 *)(Address))
Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space
我正在使用Mircosoft编译器(MSVC)并在下面收到警告。我们在编译器标志中将警告设置为错误,因此我需要帮助解决此警告问题。
警告C4306:'type cast':从'unsigned int'转换为'volatile UINT8 *'更大的尺寸
答案 0 :(得分:3)
According to the MSDN这是因为目标类型(指针)大于源类型(unsigned int
)。我想你正在进行64位构建,这意味着unsigned int
是4个字节,指针是8个字节。
MSDN页面还解释了在这种情况下,目标值的uppper位(例如,uppper 32位)被清零,这可能是你想要的。
要使此警告静音,您可以调整宏,以便在转换为指针之前首先转换为足够大的整数类型。例如。尝试
#define MMIO_READ8(Address) (*(volatile UINT8 *)(intptr_t)(Address))