コード: 全て選択
#strict
#prompt
Type Align(8) S1
x As DWord
y As DWord
End Type
Print SizeOf (S1)
コード: 全て選択
#include <iostream>
#include <windows.h>
__declspec(align(8)) struct S1
{
DWORD x;
DWORD y;
};
int main()
{
std::cout << sizeof (S1) << std::endl;
}
コード: 全て選択
#include <iostream>
#include <windows.h>
struct S1
{
__declspec(align(8)) DWORD x;
__declspec(align(8)) DWORD y;
};
int main()
{
std::cout << sizeof (S1) << std::endl;
}
私はABのTypeに指定するAlignは構造体全体に対するアラインメントの指定であるべきだと思います。
つまり最初のABのコードは前者のVC++のコードに対応するようにするということです。
そもそもWinAPIで使われる構造体の中には8バイトアラインメントが指定されているものがあります。
そのような構造体をABに持ってくるとき,試しにType Align(8)としてみたことからこのことに気づきました。
VC++ではalign(8)と指定されているのに,ABでは付けるとエラーになるので省くということは,
どうも違和感を感じさせます。それが前者の意味にしてほしいと言う理由ですね。