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

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

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

当我编译使用该库的程序时,编译器会使用someLib.h中定义的签名检查类型,因此,只要我使用int,一切都可以正常编译。

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

最佳答案

您不应获得编译器或链接器错误,而应仅获得运行时未定义的行为。可能会崩溃,或者如果您很幸运,则结果很奇怪。

10-06 10:39