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

时间:2016-08-01 11:45:55

标签: c++ c types compilation linker

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

我有第三方库:someLib.lib(为我的平台编译)及其对应的someLib.h。让我们说它包含以下功能:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

因此,如果您使用的库假设int为16位但您在32位系统中使用它,那么您在运行时会遇到问题 - 时间。

良好实施的库具有#if个宏来最小化这些问题,或者他们已经为不同的系统实现了各种.lib文件。他们甚至可以明确地使用intX_t(例如int32_t)整数来提高可移植性。