【发布时间】:2016-08-01 11:45:55
【问题描述】:
C 和 C++ 标准都没有指定某些数据类型的确切长度,只指定它们的最小长度。
我有一个第三方库:someLib.lib(为我的平台编译)及其对应的someLib.h。假设它包含以下功能:
int getNumber();
void setNumber(int number);
当我编译一个使用这个库的程序时,编译器会检查带有someLib.h中定义的签名的类型,所以只要我使用ints,一切都应该编译正常。
但是当我的编译器中的int 比使用编译器someLib.lib 的编译器更长或更短时会发生什么?链接时会被检测到吗?它会导致运行时错误吗?我可以在不知道它是如何编译的情况下安全地使用someLib.lib 吗?
【问题讨论】:
-
对于像
int这样的简单类型,这几乎从来不是问题。出现此类问题的地方是具有不同填充的结构,具体取决于编译器差异,甚至只是同一编译器上的不同选项;或具有实现定义的详细信息(例如位字段)的功能。这就是在库中包含完全包含此类详细信息的不透明接口的原因之一。
标签: c++ c types compilation linker