1
 #pragma pack(push)
 #pragma pack(1)

チュートリアルをダウンロードしましたが、ヘッダーファイルにこれらの行が含まれています。これに関連するチュートリアルやリファレンスを提供していただければ幸いです。

4

3 に答える 3

3

Microsoftの説明:

http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx

IBMのAIXxlCの説明:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Frnpgpack.htm

基本的に、構造体または共用体を格納するときに使用されるバイト境界を決定します。プッシュ/ポップは、これらの設定をスタックに保存および取得する方法として機能します。

将来の参考のために、Webで質問しているキーワードを検索することで、時間を節約できる可能性があります。この情報を見つけるために私がしたのは、http://www.google.comで「プラグマパック」を検索することだけでした。

于 2011-06-15T04:45:00.033 に答える
2

すべての#pragmaステートメントはベンダー固有です。

これはMicrosoft固有のものであり、コンパイラがsに追加できる「パッキング」の量(バイト単位)を記述してstruct、より適切な配置を実現します。

#pragma pack(push)以前の設定をスタックに保存するだけです。次に、特定のコードブロックのパッキング条件を変更し、後で#pragma pack(pop)以前の設定を復元できます。

于 2011-06-15T05:02:05.627 に答える
1

これは、MSVC++固有のパッキング指定子です。ドキュメントから正確に何をするかを知ることができます。

パッキングは、アラインメントを維持するために、コンパイラが特定の構造体(またはクラス)のデータメンバー間に挿入できるパディングの量を変更します。ネットワークコードの場合、構造体をネットワークAPI#pragma packにキャストしchar*たりvoid*、ネットワークAPIに渡したりして、構造体全体をネットワーク経由で一度に送信できるように、指定子が使用されている可能性があります。

(マシンごとに配置とバイト順序のルールが異なるため、これは安全ではないことに注意してください。これは、ワイヤの両端の両方のマシンが同じハードウェアタイプを使用している場合にのみ機能します)

于 2011-06-15T04:38:30.547 に答える