C和C++標準都沒有指定某些數據類型的確切長度,只是它們的最小長度。第三方庫中的不同數據類型長度
我有第三方庫:someLib.lib
(爲我的平臺編譯)及其相應的someLib.h
。比方說,它包含以下功能:
int getNumber();
void setNumber(int number);
當我編譯程序消耗這個庫,編譯器檢查與在someLib.h
定義簽名的類型,所以只要我使用int
S,一切都應該編譯罰款。
但是,在我的編譯器的int
中比在編譯器someLib.lib
中使用的編譯器長或短時發生了什麼?在鏈接過程中會被檢測到嗎?它會導致運行時錯誤?如果不知道它是如何編譯的,我可以安全地使用someLib.lib
嗎?
這對於簡單類型(例如int)幾乎不存在問題。這種問題出現的地方在於具有不同填充的結構,這取決於編譯器的差異,甚至是同一編譯器上的不同選項;或者具有實現定義的細節(如位域)的功能。這就是擁有完全在庫中包含這些細節的不透明接口的原因之一。 –