Выравнивание структур C и переносимость между компиляторами

Предполагается, что следующий заголовочный файл соответствует, например, разделяемой библиотеке.Экспортируемая функция принимает указатель на пользовательскую структуру, определенную в этом заголовке:

// lib.h

typedef struct {
  char c;
  double d;
  int i;
} A;

DLL_EXPORT void f(A* p);

Если разделяемая библиотека создается с помощью одного компилятора, а затем используется из кода C, созданного с помощью другого компилятора, она может не работать из-за другого выравнивания памяти, т.к. Предлагается выравнивание памяти в C-структурах. Итак, есть ли способ сделать определение моей структуры переносимым между разными компиляторами на одной платформе?

Меня интересует конкретно платформа Windows (очевидно, у нее нет четко определенного ABI), хотя было бы любопытно узнать и о других платформах.

10
задан Community 23 May 2017 в 11:54
поделиться