INFO: #pragma pack() Affects Declarations, Not Definitions (40027)



The information in this article applies to:

  • Microsoft C for MS-DOS
  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52
  • Microsoft Visual C++ 2.0
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 5.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q40027

SUMMARY

The pack pragma affects declarations, not definitions. Place #pragma pack() prior to data declarations.

MORE INFORMATION

Sample Code

The following program demonstrates usage of #pragma pack():
/* compile options needed */ 
/* Elements of variables of type struct x will be byte-aligned. */ 
#pragma pack(1)
struct x { int a; char b; int c; };

/* Elements of variables of type struct y will be word-aligned. */ 
#pragma pack(2)
struct y { int a; char b; int d; };

/* The pragma below does NOT affect the definitions that follow. */ 
#pragma pack(4)

struct x X;
struct y Y;

void main (void)
{ /* dummy main */ }
				
NOTE: The default packing value for the 16-bit products mentioned above is 2 bytes. The default packing value for Visual C++ 32-bit, versions 1.0 and 2.xx, is 4 bytes. The default packing value for Visual C++ 32-bit, version 4.0, is 4 bytes for bit fields and 8 bytes otherwise.

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbinfo kbLangC KB40027