在下面的这段代码中,我想要一个要结合的指针,并使用该指针来访问在strucutre txcmsgeid内部定义的成员(例如)eid(8位字段)。我怎样才能做到这一点?
typedef union uCANTxMessageBuffer
{
struct
{
txcmsgsid CMSGSID;
txcmsgeid CMSGEID;
};
int messageWord[4];
}CANTxMessageBuffer;
Run Code Online (Sandbox Code Playgroud) 是((char *)NULL - (char *)NULL)UB吗?
海事组织的答案在这里不是微不足道的。有什么想法吗?
Godbolt 实验链接https://godbolt.org/z/zgVGk9
我不是在问添加一些空指针的东西(就像在提议的欺骗中一样),而只是关于一种特殊情况。
由于-运算符应用于xwhich is,此函数是否会调用未定义的行为unsigned?我搜索了标准,找不到解释。
unsigned foo(unsigned x)
{
return x ^= x & -x;
}
Run Code Online (Sandbox Code Playgroud)
海事组织是的。
编辑void func(unsigned x)
{
printf("%x", -x);
}
int main(void)
{
func(INT_MIN);
}
Run Code Online (Sandbox Code Playgroud)
IMO唯一的解释是它被提升为更大的有符号整数大小,然后转换为无符号整数。
如果将其提升为更大的整数大小,如果没有更大的有符号整数类型会发生什么?