pack關鍵字的使用

pack  
   
  #pragma   pack([n])  
   
  該指令指定結構和聯合成員的緊湊對齊。而一個完整的轉換單元的結構和聯合  
   
  的緊湊對齊由/Zp選項設置。緊湊對齊用pace編譯指示在數據說明層設置。該編譯指示在其出現後的第一個結構或聯合說明處生效。該編譯指示對定義無效。 當你使用#pragma   pack(n)時,這裏n爲1、2、4、8或16。第一個結構成員之後的每個結構成員都被存儲在更小的成員類型或n字節界限內。如果你使用無參量 的#pragma   pack,結構成員被緊湊爲以/Zp指定的值。該缺省/Zp緊湊值爲/Zp8。  
   
  編譯器也支持以下增強型語法:  
   
  #pragma   pack([[{push|pop},][標識符,]][n])  
   
  若不同的組件使用pack編譯指示指定不同的緊湊對齊,這個語法允許你把程序組件組合爲一個單獨的轉換單元。  
   
  帶push參量的pack編譯指示的每次出現將當前的緊湊對齊存儲到一個內部編譯器堆棧中。編譯指示的參量表從左到右讀取。如果你使用push,則當前緊 湊值被存儲起來;如果你給出一個n的值,該值將成爲新的緊湊值。若你指定一個標識符,即你選定一個名稱,則該標識符將和這個新的的緊湊值聯繫起來。  
   
  帶一個pop參量的pack編譯指示的每次出現都會檢索內部編譯器堆棧頂的值,並且使該值爲新的緊湊對齊值。如果你使用pop參量且內部編譯器堆棧是空 的,則緊湊值爲命令行給定的值,並且將產生一個警告信息。若你使用pop且指定一個n的值,該值將成爲新的緊湊值。  
   
  若你使用pop且指定一個標識符,所有存儲在堆棧中的值將從棧中刪除,直到找到一個匹配的標識符,這個與標識符相關的緊湊值也從棧中移出,並且這個僅在 標識符入棧之前存在的緊湊值成爲新的緊湊值。如果未找到匹配的標識符,將使用命令行設置的緊湊值,並且將產生一個一級警告。缺省緊湊對齊爲8。  
   
  pack編譯指示的新的增強功能讓你編寫頭文件,確保在遇到該頭文件的前後的緊湊值是一樣的。  
   
  /*   File   name:   include1.h*/  
   
  #pragma   pack(push,enter_include1)  
   
  /*   你的包括文件代碼...   */  
   
  #pragma   pack(pop,   enter_include1)  
   
  /*   include1.h結束   */  
   
  在上面的例子中,當前緊湊值與標識符enter_include1聯繫起來,並被壓入頭文件的項中。頭文件末尾的pack編譯指示刪除所有可能出現在頭文 件中的干預緊湊值,並且刪除與enter_include1相關的緊湊值。因此確保該頭文件的前後的緊湊值是相同的。  
   
  這種新功能也允許你使用代碼,例如頭文件,它可以使用pack編譯指示設置不同於在你的代碼中設置的緊湊值的緊湊對齊:  
   
  #pragma   pack(push,before_include1)  
   
  #include   "include1.h"  
   
  #pragma   pack(   pop,before_include1)  
   
  在上面的例子中,對於出現在include.h中的緊湊值的任何變化,你的代碼是受到保護的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章