C11と構造体を使用した-Wpaddedで問題が発生しています。
_Alignasを使用したStructureメンバーの配置についてはすでに読みましたが、clangのドキュメントを調べたところ、現在サポートされていることがわかりました。
また、最近トランクから作成した非常に新しいバージョンのclangを使用しています。
$ clang --version
clang version 3.3 (trunk 175473)
Target: x86_64-unknown-linux-gnu
Thread model: posix
私が遭遇している問題はこれです:
#include <stdlib.h>
#include <stdalign.h>
struct foo{
void* a;
int b;
};
int main() {
struct foo instance;
instance.a = NULL;
instance.b = 2;
return 0;
}
これは私にこの警告を投げます:
$ clang -Weverything -std=c11 t.c
t.c:4:8: warning: padding size of 'struct foo' with 4 bytes to alignment boundary [-Wpadded]
struct foo{
^
1 warning generated.
さて、これは何_Alignas
のためですか?次のように、intメンバー宣言の前に配置してみました。
struct foo{
void* a;
_Alignas(void*) int b;
};
しかし、同じ警告が残っています。また、_Alignasをさまざまな場所に配置してみましたが、役に立ちませんでした。ここで何が欠けていますか?
この特定の警告を無視することができ、パディングが重要である理由を理解しているので、パディングとは何かについての回避策や説明には興味がありません。警告が出ないように、Cをポータブルで標準に準拠した方法で変更する方法を知りたいです。