将硬编码值强制转换为易失性UINT8指针-C编程

将硬编码值强制转换为易失性UINT8指针-C编程,c,C,我正在使用Mircosoft编译器(MSVC)并得到下面的警告。我们在编译器标志中将警告设置为错误,因此我需要帮助解决此警告 警告C4306:“类型强制转换”:从“unsigned int”转换为“volatile UINT8” *'的大小更大发生这种情况是因为目标类型(指针)大于源类型(unsigned int)。我假设您正在进行64位构建,这意味着无符号int是4个字节,指针是8个字节 MSDN页面还解释了在这种情况下,目标值的UPPER位(例如UPPER 32位)被调零,这可能是您想要的

我正在使用Mircosoft编译器(MSVC)并得到下面的警告。我们在编译器标志中将警告设置为错误,因此我需要帮助解决此警告

警告C4306:“类型强制转换”:从“unsigned int”转换为“volatile UINT8” *'的大小更大

发生这种情况是因为目标类型(指针)大于源类型(
unsigned int
)。我假设您正在进行64位构建,这意味着
无符号int
是4个字节,指针是8个字节

MSDN页面还解释了在这种情况下,目标值的UPPER位(例如UPPER 32位)被调零,这可能是您想要的

要使此警告静音,可以调整宏,以便在转换为指针之前,先转换为足够大的整数类型。例如,试试看

#define MMIO_READ8(Address)                 (*(volatile UINT8 *)(Address))

Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space
这是因为目标类型(指针)大于源类型(
unsigned int
)。我假设您正在进行64位构建,这意味着
无符号int
是4个字节,指针是8个字节

MSDN页面还解释了在这种情况下,目标值的UPPER位(例如UPPER 32位)被调零,这可能是您想要的

要使此警告静音,可以调整宏,以便在转换为指针之前,先转换为足够大的整数类型。例如,试试看

#define MMIO_READ8(Address)                 (*(volatile UINT8 *)(Address))

Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space
这是因为目标类型(指针)大于源类型(
unsigned int
)。我假设您正在进行64位构建,这意味着
无符号int
是4个字节,指针是8个字节

MSDN页面还解释了在这种情况下,目标值的UPPER位(例如UPPER 32位)被调零,这可能是您想要的

要使此警告静音,可以调整宏,以便在转换为指针之前,先转换为足够大的整数类型。例如,试试看

#define MMIO_READ8(Address)                 (*(volatile UINT8 *)(Address))

Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space
这是因为目标类型(指针)大于源类型(
unsigned int
)。我假设您正在进行64位构建,这意味着
无符号int
是4个字节,指针是8个字节

MSDN页面还解释了在这种情况下,目标值的UPPER位(例如UPPER 32位)被调零,这可能是您想要的

要使此警告静音,可以调整宏,以便在转换为指针之前,先转换为足够大的整数类型。例如,试试看

#define MMIO_READ8(Address)                 (*(volatile UINT8 *)(Address))

Data8 = MMIO_READ8(0xFCE00000); // 0xFCE0000 is memory map address space

32位机器还是64位机器?如果是32位,指针的大小是4字节,那么您可以忽略警告32位机器还是64位机器?如果是32位,指针的大小是4字节,那么您可以忽略警告32位机器还是64位机器?如果是32位,指针的大小是4字节,那么您可以忽略警告32位机器还是64位机器?如果为32位,指针的大小为4字节,因此可以忽略警告