strict-aliasing 相关问题

严格别名是由C或C ++编译器做出的假设,即取消引用指向不同类型对象的指针永远不会引用相同的内存位置(即它们不会相互别名)。

严格的别名和强制转换联合指针

我环顾了这个站点,试图找出我对不同联合使用强制转换是否违反了严格的别名或其他UB。我有数据包通过串行线路进入,并且我存储/获取...

回答 1 投票 0

在位域上铸造uint64_t

我找到了将位字段用于网络消息的代码。我想知道什么铸造bitfield_struct数据= *(bitfield_struct *)&tmp; exaclty的功能以及语法的工作方式。不会吧...

回答 2 投票 0

如何从uint32_t获取浮点值?

我使用这部分代码从我的微控制器上的OSC消息中读取浮点值。但是我收到“取消引用类型化指针将破坏严格别名规则[-Wstrict-aliasing]”错误,并且没有...

回答 1 投票 0

二次重解释和严格别名

这是严格违反别名的经典示例:std :: uint32_t foo(float * f,std :: uint32_t * i){* i = 1; * f = 2;返回* i; } int main(){std :: uint32_t i = 3; foo(...

回答 1 投票 4

在没有不确定行为的情况下将浮点缓冲区重用为doubles

在一个特定的C ++函数中,我碰巧有一个指向大浮点缓冲区的指针,我想暂时使用该缓冲区存储双精度数的一半。有没有一种方法可以将此缓冲区用作暂存器...

回答 6 投票 25

您能否在具有相同表示形式的类型之间重新解释_cast?

假设我们有两种类型,它们具有相同的表示形式(相同的成员变量和基类,并且顺序相同)。在它们之间进行reinterpret_cast是否有效(即不是UB)?例如。是...

回答 1 投票 2

严格的别名和对编译时C数组的引用

给出以下代码#include #include #include #include static_assert(CHAR_BIT == 8,“一个字节不由8位组成”);无效...

回答 2 投票 5

强制转换为不相关的引用类型是否违反严格的别名规则?

严格的别名规则说,如果程序尝试通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:— ...

回答 1 投票 1

可以在类型,是工会成员别名工会吗?

通过这个问题提示:本C11标准指出一个指向联合可以被转换为一个指针到它的每一个构件。从第6.7.2.1p17:工会的大小就足够了......

回答 4 投票 5

柔性阵列成员中的严格别名?

我正在写一个竞技场分配器并且它有效,但我觉得它违反了严格的别名规则。我想知道我是对还是错。这是代码的相关部分:typedef struct ArenaNode ...

回答 2 投票 4

C中的严格别名规则

我正在尝试理解6.5(p6)中定义的严格别名规则:如果通过一个类型不是字符类型的左值将值存储到没有声明类型的对象中,那么......

回答 1 投票 7

修复取消引用类型惩罚指针将破坏严格别名

我正在尝试使用GCC编译特定程序时修复两个警告。警告是:警告:解除引用类型惩罚指针将破坏严格别名规则[-Wstrict-aliasing]和...

回答 6 投票 24

在实践中,工会,别名和打字:什么有效,有什么不可行?

我有一个问题,了解使用GCC的工会可以做什么和不可以做什么。我阅读了有关它的问题(特别是这里和这里),但他们关注C ++标准,我觉得有一个不匹配...

回答 5 投票 16

不一致的严格别名规则

我有以下程序,我通过将8位缓冲区转换为32位和64位值,以一种看似快速的方式初始化两个缓冲区。 #包括 #包括 typedef ...

回答 2 投票 1

是否错误地指定了严格别名规则?

如前所述,表单union的联合some_union {type_a member_a; type_b member_b; ......}; n个成员在重叠存储中包含n + 1个对象:一个对象用于......

回答 9 投票 29

通过工会进行别名

6.5(p7)有一个关于联合和聚合的项目符号:一个对象的存储值只能通过具有以下类型之一的左值表达式访问:[...] - ...

回答 2 投票 3

Clang严格别名优化与无法访问的代码违反严格别名

关于一个例子,我有一个关于严格别名和铿锵优化的问题。让我们考虑以下示例(1):typedef void(* FTy)(void); FTy F = 0; (*F)();这是一种未定义的行为。 ...

回答 2 投票 1

严格别名规则是否适用于函数调用?

关于下面的示例,在f1中,不会发生别名,因为p(void *)不可访问且p1是访问内存的唯一指针。但是,p1(float *)和p2(int *)之间存在指针别名...

回答 2 投票 0

gcc,严格别名和恐怖故事

在gcc-strict-aliasing-and-casting-through-a-union中,我问是否有人遇到过通过指针进行联合惩罚的问题。到目前为止,答案似乎是否定的。这个问题更广泛:......

回答 6 投票 46

为什么严格的别名规则不适用于int *和unsigned *?

在C语言中,我们无法使用与该对象的有效类型具有不兼容类型的左值表达式来访问对象,因为这会导致未定义的行为。并基于此......

回答 2 投票 3

© www.soinside.com 2019 - 2024. All rights reserved.