問題:
是否可以安全地讀/寫一個以以在確保跨平台和編譯器的方式將C 結構體轉換為檔案相容性?
答案:
不,這是不可能的,因為 C 中缺乏二進位級標準化。
根據 Don Box ,C 缺乏二進位層級的標準化,這意味著不同的編譯器可能會以不同的方式實現結構填充。即使在同一個編譯器中,結構體的打包對齊方式也可能會因所使用的編譯指示包而異。
此外,結構體中成員的順序可能會影響其大小。例如,具有相同成員但聲明順序不同的結構體可以具有不同的大小。
範例:
使用 gcc-4.3.4編譯上述程式碼會產生:
這表示即使兩個結構體有相同的成員,它們的大小
結論:
標準沒有指定如何實現填充,由編譯器自行決定。因此,不可能假設所有編譯器都會套用相同的填充規則,從而難以實現跨平台相容性。
以上是C 結構體可以跨平台和編譯器安全地讀寫嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!