首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第三方库中的不同数据类型长度

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

Stack Overflow用户
提问于 2016-08-01 19:45:55
回答 2查看 48关注 0票数 2

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

我有一个第三方库:someLib.lib (为我的平台编译的)和它对应的someLib.h。假设它包含以下函数:

代码语言:javascript
运行
复制
int getNumber();
void setNumber(int number);

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 19:49:15

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

票数 3
EN

Stack Overflow用户

发布于 2016-08-01 19:53:57

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

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

好的实现库有#if宏来最小化这些问题,或者它们已经为不同的系统实现了各种.lib文件。他们甚至可以显式地使用intX_t (例如int32_t)整数,以使其更易于移植。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38698038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档