teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

pragmaは非標準です。

2018/09/22 01:36

投稿

raccy
raccy

スコア21784

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