第三方库中的不同数据类型长度

Different data type lengths in third party libraries

本文关键字:数据类型 第三方      更新时间:2023-10-16

C和C++标准都没有指定某些数据类型的确切长度,只指定它们的最小长度。

我有一个第三方库:someLib.lib(为我的平台编译)及其相应的someLib.h。假设它包含以下功能:

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

当我编译一个使用这个库的程序时,编译器会检查具有someLib.h中定义的签名的类型,所以只要我使用ints,一切都应该编译得很好。

但是,当我的编译器的int比编译someLib.lib时使用的编译器更长或更短时,会发生什么?链接时会检测到它吗?它会导致运行时错误吗?我可以安全地使用someLib.lib而不知道它是如何编译的吗?

您不应该得到编译器或链接器错误,只应该得到运行时未定义的行为。可能会崩溃,或者如果幸运的话,只是奇怪的结果。

使用对底层系统或编译器有狭隘假设的库可能会导致问题。

因此,如果您使用的库假设int是16位,但您在32位系统中使用它,那么在运行时就会出现问题。

好的实现库有#if宏来最大限度地减少这些问题,或者它们为不同的系统实现了各种.lib文件。它们甚至可以显式地使用intX_t(例如int32_t)整数以更具可移植性。