Совместимость указателей на структуры

Предположим, у нас есть две структуры:

typedef struct Struct1
{
    short a_short;
    int id;
} Struct1;

typedef struct Struct2
{
    short a_short;
    int id;
    short another_short;
} Struct2;

Безопасно ли приводить из Struct2 * в Struct1 *? Что об этом говорит спецификация ANSI? Я знаю, что некоторые компиляторы имеют возможность переупорядочивать поля структур для оптимизации использования памяти, что может сделать эти две структуры несовместимыми. Есть ли способ убедиться, что этот код будет корректен, независимо от флага компилятора?

Спасибо!

9
задан Sangeeth Saravanaraj 2 January 2012 в 16:00
поделиться