Oak, по-моему, по спецификации, но gcc поддерживает флаги, изменяющие правила выравнивания.
Freddy, это компилятор выравнивает или по спецификации С такое?
Не трогая структуру parent, можно изменить смещение child, если изменить тип child.id с int на double. В этом случае смещение станет равным 8, потому что компилятор выравнивает данные по самому большому элементу и patent в памяти будет располагаться так: первые 4 байта - parent.id следующие 4 байта пустые затем 8 байт child.id
vl@volk, в больших сишных проектах, где куча разнообразных структур есть. Ради интереса посчитал, сколько раз встречается в Линуксе:
vl@volk, говорят весь линукс это набор таких макросов
где оно используется? это что так облегчает задачу?
По вопросу в конце: ни у кого предположений нет? Завтра днём дам ответ.
Oak, нет, без ptr мы не будем знать из чего вычитать смещение, а без type и member не сможем вычислить само смещение.
Элегантно! Только у меня так и не исчез вопрос: в определении функции присутствуют два параметра — структура и указатель на нее. Нельзя обойтись чем-то одним? Прочие языки Категории |