更新:mydogisboxは次のように書いています:
記録のために、、__attribute__((packed))
および#pramga pack(1)
すべて#pragma pack(push, 1)
が機能しました。
__attribute__((packed))
サポートされているgcc拡張機能です。
#pragma pack(...)
clangのドキュメントには、ディレクティブもサポートされていると記載されています。
clangは、Microsoft VisualC++の拡張機能を実験的にサポートしています。これを有効にするには、-fms-extensionsコマンドラインオプションを使用します。これは、Windowsターゲットのデフォルトです。サポートが不完全であることに注意してください。Microsoft拡張機能を有効にすると、特定の構成要素(__declspecおよびMicrosoftスタイルのasmステートメントを含む)がサイレントに削除されます。
clangは、#pragma pack
レコードレイアウトを制御するためのMicrosoft機能をサポートしています。
ソース:http ://clang.llvm.org/docs/UsersManual.html
言うだけ:
#pragma pack(1)
struct my_struct {
int16_t x;
// etc.
};
それが機能するかどうかを確認します(Windowsを使用していない場合はでコンパイルし-fms-extensions
ます)。
上記はすべて非標準の拡張機能であり、新しいC ++ 11標準には新しいalignas
キーワードがあります:http://en.cppreference.com/w/cpp/language/alignas
struct alignas(1) my_struct {
int16_t x;
// etc.
};
しかし、そのサポートはまだ少し大ざっぱです。