pack Áö½ÃÀÚ´Â ÀÌÈĺÎÅÍ ¼±¾ðµÇ´Â ±¸Á¶Ã¼ÀÇ Á¤·Ä ¹æ½ÄÀ» ÁöÁ¤ÇÑ´Ù. ÇÁ·ÎÁ§Æ® ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ ±¸Á¶Ã¼ Á¤·Ä ¹æ½ÄÀ» °¢ ¸ðµâº°·Î Á¶Á¤ÇÒ ¼ö ÀÖÁö¸¸ pack Áö½ÃÀÚ´Â ¼Ò½ºÀÇ Áß°£¿¡¼ ¿øÇÏ´Â ±¸Á¶Ã¼¿¡ ´ëÇØ Á¤·Ä ¹æ½ÄÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ÀÌ Áö½ÃÀÚ¸¦ »ç¿ëÇÏ¸é °°Àº ¼Ò½º¿¡ ÀÖ´Â µÎ ±¸Á¶Ã¼¸¦ ´Ù¸¥ ¹æ½ÄÀ¸·Î Á¤·ÄÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¼±¾ð¹®À» º¸ÀÚ.
#pragma pack(2)
struct st1 { short s; int i; };
#pragma pack(4)
struct st2 { short s; int i; };
ÀÌ·¸°Ô ¼±¾ðÇϸé st1 ±¸Á¶Ã¼´Â 2¹ÙÀÌÆ® Á¤·ÄµÇ¹Ç·Î 6¹ÙÀÌÆ®¸¦ Â÷ÁöÇϸç st2´Â 4¹ÙÀÌÆ® Á¤·ÄµÇ¹Ç·Î 8¹ÙÀÌÆ®¸¦ Â÷ÁöÇÑ´Ù. ÇÁ·ÎÁ§Æ® ¼³Á¤¿¡ ÁöÁ¤µÈ Á¤·Ä°ªÀ» ´Ù¸¥ °ªÀ¸·Î ¹Ù²Ù°í ½ÍÀ» ¶§ pack(n) Áö½ÃÀÚÀÇ °ýÈ£¾È¿¡ ¿øÇÏ´Â °ªÀ» Àû¾îÁÖ¸é µÈ´Ù. Á¤·Ä°ªÀÇ µðÆúÆ®´Â 8À̸ç nÀ» »ý·«ÇÏ¿© pack()À̶ó°í¸¸ ÀûÀ¸¸é µðÆúÆ® Á¤·Ä°ªÀ¸·Î µ¹¾Æ°£´Ù.
pack(n)À¸·Î Á¤·Ä°ªÀ» º¯°æÇϸé ÀÌÈĺÎÅÍ ¼±¾ðµÇ´Â ±¸Á¶Ã¼´Â ÀÌ Á¤·Ä°ªÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. ¸¸¾à ƯÁ¤ ±¸Á¶Ã¼¿¡ ´ëÇØ¼¸¸ ÀÓ½ÃÀûÀ¸·Î ¿øÇÏ´Â Á¤·Ä°ªÀ» Àû¿ëÇÑ ÈÄ ¿ø·¡ÀÇ Á¤·Ä°ªÀ¸·Î µ¹¾Æ¿À·Á¸é º¯°æÇϱâ Àü¿¡ ¿ø·¡ °ªÀ» º¸°üÇØ µÎ¾î¾ß Çϴµ¥ ÀÌ ¶§´Â push, pop ¸í·ÉÀ» »ç¿ëÇÑ´Ù. ÄÄÆÄÀÏ·¯´Â ³»ºÎ¿¡ Á¤·Ä°ª ÀúÀåÀ» À§ÇÑ ½ºÅÃÀ» À¯ÁöÇϰí ÀÖÀ¸¸ç ÀÌ ½ºÅÿ¡ Á¤·Ä »óŸ¦ LIFO ¿øÄ¢¿¡ µû¶ó ÀúÀåÇÏ°í ´Ù½Ã »©³»¿Ã ¼ö ÀÖ´Ù.
pack(push, n) ¸í·ÉÀº ÇöÀçÀÇ Á¤·Ä »óŸ¦ ½ºÅÿ¡ ÀúÀåÇÏ¸é¼ Á¤·Ä°ªÀ» nÀ¸·Î º¯°æÇϴµ¥ nÀ» »ý·«Çϸé ÇöÀç Á¤·Ä°ªÀ» ½ºÅÿ¡ ÀúÀåÇϱ⸸ ÇÑ´Ù. pack(pop,n)Àº ½ºÅÃÀÇ ÃÖ»ó´Ü¿¡ ÀÖ´Â Á¤·Ä°ªÀ» Á¦°ÅÇÏ°í »õ·Î¿î Á¤·Ä°ªÀ» nÀ¸·Î º¯°æÇϴµ¥ nÀ» »ý·«ÇÏ¸é ½ºÅÿ¡¼ ²¨³½ Á¤·Ä°ªÀ» »õ·Î¿î Á¤·Ä°ªÀ¸·Î ¼³Á¤ÇÑ´Ù. push´Â ÀúÀå°ú µ¿½Ã¿¡ ´Ù¸¥ °ªÀ¸·Î º¯°æÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î º¸Åë n°ú ÇÔ²² ¾²¸ç popÀº ÀúÀåµÈ °ªÀ» º¹±¸½Ãų ¶§ »ç¿ëÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î º¸Åë ´Üµ¶À¸·Î »ç¿ëÇÑ´Ù. push, popÀº ¿øÇϴ¸¸Å ÁßÃ¸ÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.
#pragma pack(2)
struct st1 { short s; int i; }; // 2¹ÙÀÌÆ® Á¤·Ä
#pragma pack(push,4) // Ǫ½ÃÇÏ¸é¼ 4¹ÙÀÌÆ® Á¤·Ä·Î ¹Ù²Þ
struct st2 { short s; int i; }; // 4¹ÙÀÌÆ® Á¤·Ä
#pragma pack(pop) // ¿ø·¡ Á¤·Ä°ª º¹¿ø
struct st3 { short s; int i; }; // 2¹ÙÀÌÆ® Á¤·Ä
ÃÖÃÊ Á¤·Ä°ª 2¸¦ °¡Áö´Â »óÅ¿¡¼ 4·Î º¯°æÇÏ¸é¼ ¿ø·¡ Á¤·Ä »óÅÂÀÎ 2¸¦ ½ºÅÿ¡ Ǫ½ÃÇØ µÎ¾ú´Ù. ±×·¡¼ st2 ±¸Á¶Ã¼¸¦ ¼±¾ðÇÑ ÈÄ ´Ù½Ã ÆËÇϸé Á¤·Ä »óÅ 2·Î º¹±¸µÉ °ÍÀÌ´Ù. ¾î¶² ±¸Á¶Ã¼°¡ ¹Ýµå½Ã ƯÁ¤ Á¤·Ä »óŸ¦ °¡Á®¾ß ÇÑ´Ù¸é pack(push, n) Áö½ÃÀÚ·Î ¿ø·¡ Á¤·Ä»óŸ¦ À¯ÁöÇÏ¸é¼ ¼³Á¤À» Àá½Ã º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¾î¶² ÆÄÀÏÀ» Àоî¾ß Çϴµ¥ ÀÌ ÆÄÀÏÀÇ Çì´õ°¡ ±¸Á¶Ã¼·Î µÇ¾î ÀÖ°í ÀÌ ±¸Á¶Ã¼´Â ¹Ýµå½Ã 1¹ÙÀÌÆ®·Î Á¤·ÄµÇ¾î¾ß ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÀÌ ±¸Á¶Ã¼¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù.
#pragma pack(push,1)
struct Header
{
char Magic[2];
int Version;
char NumRecord;
double xsize, ysize;
};
#pragma pack(pop)
±¸Á¶Ã¼¸¦ ¼±¾ðÇϱâ Àü¿¡ Á¤·Ä »óŸ¦ 1¹ÙÀÌÆ®·Î ¹Ù²ÙµÇ ÀÌÀüÀÇ Á¤·Ä »óÅ´ ½ºÅÿ¡ Ǫ½ÃÇØ µÎ¾úÀ¸¸ç ±¸Á¶Ã¼ ¼±¾ðÀÌ ³¡³ ÈÄ ´Ù½Ã ¿ø·¡´ë·Î Á¤·Ä°ªÀ» º¹±¸ÇÑ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é Header ±¸Á¶Ã¼´Â ÇÁ·ÎÁ§Æ® ¼³Á¤´ë·Î Á¤·ÄµÇ¾î ¹ö¸®¹Ç·Î ÀÌ ±¸Á¶Ã¼·Î´Â ÆÄÀÏÀ» Á¦´ë·Î ÀÐÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù.