Прежде всего, каждый заголовок #include
'd в вашем исходном файле получает процессы буквально, не имеет значения, находится ли он в том же проекте или нет.
Это может определенно привести к некоторым проблемам.Например, проект A определяет структуру и выравнивает все ее элементы по границе байта (упакован) и экспортирует функцию, принимающую указатель на эту структуру.Затем, если проект B по какой-либо причине компилируется в такой среде, что та же самая структура выравнивается по-другому, было бы невозможно передать адрес экземпляра этого struct
непосредственно в эту экспортированную подпрограмму.Они имеют разные sizeof
s как минимум в A и B.
Простое правило таково:
1) если вы хотите взаимодействовать с какой-то внешней скомпилированной библиотекой, вы должны убедиться, что структуравыравнивание согласуется с тем, которое используется компилятором библиотеки.Это касается структур, присутствующих в заголовках библиотеки.Хорошие библиотеки пытаются минимизировать усилия, предоставляя #pragma
для некоторых компиляторов, чтобы обеспечить правильное выравнивание.
2) если вы используете структуры внутри какого-то вашего проекта, вы можете оставить его в покое, просто напишите переносимый код, которыйне полагается на какое-то конкретное выравнивание, оно подойдет.