不管代码有多“糟糕”,假设对齐等操作在编译器/平台上不是问题,那么这种行为是未定义的还是破坏的?
如果我有这样的结构:-
struct data
{
int a, b, c;
};
struct data thing;
是 合法的以 (&thing.a)[0]
、 (&thing.a)[1]
和 (&thing.a)[2]
的形式访问 a
、 b
和 c
吗?
在每一种情况下,在每一个编译器和平台上我尝试它,与每一个设置我尝试它’工作’。我只是担心编译器可能没有意识到 B和 事物[1]是同一个东西,存储到‘ b’的东西可能被放在一个寄存器中,而且事物[1]从内存中读取了错误的值(例如)。不管怎样,我都做了正确的选择。(我当然知道这证明不了什么)
这不是我的代码; 这是我必须处理的代码,我感兴趣的是这是 很糟糕代码还是 支离破碎代码,因为不同的代码会影响我对它进行大幅度修改的优先级:)
标记为 C 和 C + + 。我最感兴趣的是 C + + ,如果不同的话也可以是 C,只是出于兴趣。