簡體   English   中英

第三方庫中不同的數據類型長度

[英]Different data type lengths in third party libraries

C和C ++標准都沒有指定某些數據類型的確切長度,而僅指定了它們的最小長度。

我有一個第三方庫: someLib.lib (針對我的平台編譯)及其對應的someLib.h 假設它包含以下功能:

int getNumber();
void setNumber(int number);

當我編譯使用該庫的程序時,編譯器會使用someLib.h定義的簽名檢查類型,因此,只要我使用int ,一切都可以正常編譯。

但是,如果在我的編譯器的int中使用的someLib.lib長於或短於使用compile someLib.lib的編譯器,會someLib.lib什么? 鏈接期間會檢測到嗎? 會導致運行時錯誤嗎? 我可以在不知道如何編譯的情況下安全地使用someLib.lib嗎?

您不應獲得編譯器或鏈接器錯誤,而應僅獲得運行時未定義的行為。 可能會崩潰,或者如果您很幸運,則結果很奇怪。

使用對底層系統或編譯器的假設狹窄的庫可能會導致問題。

因此,如果您使用的庫假定int為16位,但您在32位系統中使用它,則運行時會遇到問題。

實施良好的庫具有#if宏以最大程度地減少這些問題,或者它們已為不同的系統實現了各種.lib文件。 他們甚至可以顯式地使用intX_t (例如int32_t )整數,以便於移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM