Estou ciente de que existem outras questões semelhantes. Eu li isso e não acho que essa pergunta tenha sido respondida.
Posso mover-me entre uma sequência consecutiva (contígua na sequência de declaração) de campos do mesmo tipo de uma estrutura usando aritmética de ponteiro sem consultar _Alignof
?
Posso mover-me entre os elementos da matriz sem consultar _Alignof
porque o preenchimento final está incluído.
No entanto, é possível que campos consecutivos do mesmo tipo em uma estrutura não estejam alinhados da mesma forma que em uma matriz?
Em outras palavras, é possível que esse código tenha um comportamento indefinido?
struct MyStruct {
long int field_1;
int field_2;
int field_3;
};
int main(void) {
struct MyStruct my_struct;
int *field_2_ptr = &my_struct.field_2;
int field_3_value = *(field_2_ptr + 1);
}
Eu sei que isso é uma má prática. Estou ciente . _ ->
Eu sei que o preenchimento pode interferir em geral. Quero saber se o preenchimento pode interferir nesta circunstância específica.
Esta questão é sobre C. Não me importo com C++.
Até agora eu compilei isso com o GCC e experimentei o Valgrind para ver se algo estava errado, e compilei com clang e UBSan. Parece estar bem neste sistema (x86-64 Linux).