Dar*_*bik 5 c padding language-lawyer
假设我有一段像这样的代码(并假设填充是按照我在评论中所说的插入的):
#include "stdint.h"
struct A
{
uint8_t x;
// 3 bytes of padding
uint32_t y;
};
void foo(struct A* a)
{
a->x = 0;
}
Run Code Online (Sandbox Code Playgroud)
是否允许编译器清除填充字节或对函数 foo 中的填充字节执行任何操作?
https://en.cppreference.com/w/c/language/object在这个问题上保持沉默,这让我相信编译器可以这样做......
我想知道编译器是否允许这样做的原因是我想要memcmp两个结构,并且我想知道我可以假设什么......
是的。C 2018 6.2.6.1 6 说:
\n\n\n当值存储在结构体或联合类型的对象中(包括成员对象中)时,与任何填充字节对应的对象表示形式的字节采用未指定的值\xe2\x80\xa6
\n