回答編集履歴
1
pragmaは非標準です。
answer
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
※ Windows 10 64bit環境、Visual C++ 2017とMinGW-w64 GCC 8.2.0で確認
|
32
32
|
|
33
|
-
`#pragma pack(1)`はパッキングアライメントを1に変更
|
33
|
+
`#pragma pack(1)`はパッキングアライメントを1に変更するコンパイラ固有の機能です。Visual C++であれば`/Zp`オプションでも変更することが可能です。つまり、同じソースコード、同じ環境、同じコンパイラであっても、コンパイルオプションが違うだけでパディングのサイズが変わると言うことです。よって、全く以てレイアウトは保証されていません。
|
34
34
|
|
35
35
|
でも、実際にこれで困ることはほとんどありません。同じプラットフォーム、同じアーキテクチャであれば、コンパイラ間のデフォルトのパッキングアライメントを同じにしているからです。他のコンパイラがそのプラットフォームのデファクトスタンダートに合わせている(WindowsならVisual C++、LinuxならGCCででしょう)とも言えるでしょう。(昔、そういった物を合わせないコンパイラがあったような気がしますが、ちょっと調べられなかったです)
|
36
36
|
|