Что касается языка программирования C...
Часть вопроса в Смещение структуры C/C++ гласит, что "& не всегда указывает на первый байт первого поля структуры"
Но просматривая «Обоснование ANSI» на http://www.lysator.liu.se/c/rat/c5.html в разделе 3.5.2.1 Спецификаторы структуры и объединения указано, что "в начале не может быть дыры". Так что я не уверен, является ли «Обоснование» окончательным, но, кажется, оно противоречит этой части этого очень заметного вопроса.
Итак, что это? Всегда ли первое поле структуры C имеет смещение 0?
struct A
{
int x;
};
struct B
{
struct A myA;
int y;
};
B myB;
&myB
Гарантировано будет таким же, как &(myB.myA)
в переносимом виде?
(Более конкретно, трюк пользовательских данных libev в Libev, Как передать аргументы для соответствующих обратных вызовов и во многих других местах предполагают, что первое поле в структуре имеет смещение 0... это действительно переносимо?)