不完整的`struct X`和`struct Y`的对齐要求是否相同?

时间:2017-04-19 07:53:50

标签: c pointers alignment language-lawyer

"C: When is casting between pointer types not undefined behavior?"的回答表明,通过没有更严格对齐要求的指针向前和向后投射是安全的。

即使类型不完整,对齐也很重要,如标准所示:

  

指向对象或不完整类型的指针可能会转换为指向其他对象的指针   对象或不完整的类型。如果结果指针未正确对齐   为了   指向类型,行为未定义。否则,当再次转换回来时,   结果应比较等于原始指针。当指向对象的指针是   转换为指向字符类型的指针,结果指向最低寻址字节   物体。结果的连续增量,直到对象的大小,产生指针   到对象的剩余字节。

现在的问题是struct X;的正确对齐要求是什么。当然,如果它是完整的,它将取决于它的内容,但如果它是不完整的(它只被声明为struct X*)怎么办?换句话说,我们可以从struct Y*转换为struct X然后再返回并获得相同的指针吗?

如果完整struct X*和不完整的对齐要求不同会是一个并发症吗?我无法在它们之间进行实际转换,但可能是您在struct X完成的上下文之间的转换之间传递了{{1}}。或者这是一个总是允许的特殊情况?

0 个答案:

没有答案