整数常量指向的对象的默认类型
Default type for object pointed by an integer constant
给定 ADDR_X
的内存地址,其中我有一些值的专用硬件寄存器,地址类型转换是否会违反严格的别名?
//lets use some arbitrary address for the sake of this example
#define ADDR_X 0xE0F0
void function(void)
{
some_structure_type *my_struct_ptr = (some_structure_type *)ADDR_X;
my_struct_ptr->a_field = 1;
...
}
是否存在整数常量指向的对象的默认类型,其中转换为指向 some_structure_type 的指针违反了?此代码是否由标准明确定义(假设地址与结构大小对齐并且结构内没有填充)?
Is there a default type for object pointed by an integer constant
否 - 部分原因是整数常量不指向任何东西。
指针指向事物,指针有类型,当不同类型的指针指向同一存储时,别名适用。
您在这里只显示一个 指针 ,类型为 some_structure_type*
,因此该位置有一个名称、一种类型,并且没有别名。地址也存储在 int
(或 intptr_t
或其他)中的事实不会将其他类型与其相关联。
您可以阅读对严格别名要求的描述here,但粗略地说,当您通过不兼容类型的指针写入和读取同一地址时,会出现实际问题,因为优化器是允许假设你没有这样做。
这意味着即使您确实有另一个指向同一位置的不兼容类型的指针,也不会成为问题,除非您通过一个指针存储并通过另一个指针加载。不管怎样,整数常量、char*
或 void*
都不算作 "pointer of incompatible type"。
给定 ADDR_X
的内存地址,其中我有一些值的专用硬件寄存器,地址类型转换是否会违反严格的别名?
//lets use some arbitrary address for the sake of this example
#define ADDR_X 0xE0F0
void function(void)
{
some_structure_type *my_struct_ptr = (some_structure_type *)ADDR_X;
my_struct_ptr->a_field = 1;
...
}
是否存在整数常量指向的对象的默认类型,其中转换为指向 some_structure_type 的指针违反了?此代码是否由标准明确定义(假设地址与结构大小对齐并且结构内没有填充)?
Is there a default type for object pointed by an integer constant
否 - 部分原因是整数常量不指向任何东西。
指针指向事物,指针有类型,当不同类型的指针指向同一存储时,别名适用。
您在这里只显示一个 指针 ,类型为 some_structure_type*
,因此该位置有一个名称、一种类型,并且没有别名。地址也存储在 int
(或 intptr_t
或其他)中的事实不会将其他类型与其相关联。
您可以阅读对严格别名要求的描述here,但粗略地说,当您通过不兼容类型的指针写入和读取同一地址时,会出现实际问题,因为优化器是允许假设你没有这样做。
这意味着即使您确实有另一个指向同一位置的不兼容类型的指针,也不会成为问题,除非您通过一个指针存储并通过另一个指针加载。不管怎样,整数常量、char*
或 void*
都不算作 "pointer of incompatible type"。