#pragma pack(push)
#pragma pack(1)
我下載了一個教程,它在頭文件中包含這些行。 我將不勝感激,如果你們能爲我提供與此相關的任何教程或引用。什麼是網絡預設電臺'的#pragma pack`呢?
#pragma pack(push)
#pragma pack(1)
我下載了一個教程,它在頭文件中包含這些行。 我將不勝感激,如果你們能爲我提供與此相關的任何教程或引用。什麼是網絡預設電臺'的#pragma pack`呢?
微軟的解釋:
http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx
IBM的AIX方xIC解釋:
基本上,它確定存儲結構或聯合時將使用的字節邊界。推/彈出作爲一種方式來存儲和檢索堆棧上的這些設置。
爲了將來的參考,您可以通過在網絡上搜索您要求的關鍵詞來節省一些時間。我所做的一切找到這個信息是搜索「編譯包」在http://www.google.com
這是MSVC++特定的包裝說明符。你可以從the documentation中找到它究竟做了些什麼。
封裝更改了多少填充編譯器允許在給定結構(或類)的數據成員之間插入以保持對齊。在網絡代碼的情況下,可能使用#pragma pack
說明符,以便可以將結構轉換爲char*
或void*
以傳遞給某個網絡API,以便一次性通過網絡發送整個結構。
(請注意,這是不安全的爲不同的機器有對齊和字節順序不同的規則;這一點,如果上線的每一端兩臺機器使用相同的硬件類型只會工作)
所有#pragma
語句是供應商特定的。
這是一個特定於Microsoft的程序,它描述了編譯器爲了更好地對齊而可以將「包裝」(以字節爲單位)添加到struct
。
#pragma pack(push)
只是保存和先前的設置在堆棧中。然後,您可以更改包裝條件的代碼的某一塊,後來就#pragma pack(pop)
恢復到以前的設置。
謝謝您的回答。如果我在linux機器上運行服務器,我需要打包嗎? – codereviewanskquestions 2011-06-15 04:56:35
@LCYSoft:參見[吉拉德Naors答案】(http://stackoverflow.com/questions/6353054/what-is-pragma-pack-for-in-network-progamming/6353230#6353230)。這是Microsoft特有的。 – Default 2011-06-15 07:21:17