7

一个非常简单的问题:是否可以保证在同一系统上intC 与 C++int相同?

不用说,这当然是一个纯粹的理论问题。

C 和 C++ 标准使用相同的语言来定义基本类型。但是,尽管 Fortran 2003 清楚地表明

use ISO_C_BINDING
integer(kind=c_int) :: i

声明了一个与“伴侣 C 处理器”上的类型兼容的整数类型int,我在 C++ 标准中找不到任何这样的断言。Fortran 会提供比 C++ 更强大的 C 互操作性保证,这似乎很奇怪!

我能找到的最接近的是第 7.5 节 [dcl.link],C++11 标准的第 3 段,其中指出

每个实现都应提供与用 C 编程语言编写的函数的链接

但是这个小句子(对我来说)似乎不足以保证基本类型的兼容性。

C++ 标准中是否还有其他一些我忽略的语言可以保证这一点,或者它是否显然被认为是理所当然的,以至于没有人费心明确地说明它?

编辑:评论中的大卫施瓦茨指出,当我说“相同的系统”时,我并不精确。我真的指的是同一个“平台”,即硬件、操作系统、系统库等。当然,这确实是一个 ABI 问题。在引用的段落中,C++ 标准似乎想要表明您可以使用 调用 C 函数extern "C",但我不确定它是否提供了足够的其他保证?

4

1 回答 1

5

不。

在 x64 amd 兼容的 cpus 上有广泛使用的兼容编译器long,默认情况下将其视为 32 位,其他视为 64 位。因此,即使是同一系统上的两个 C++ 编译器也不会出现这种情况,更不用说 C++ 和 C 编译器了。

在一个编译器中,这取决于编译器供应商是否兼容。他们通常(总是)是。“一个编译器”在这里有点用词不当:从某种意义上说,C 和 C++ 编译器是不同的编译器,即使在同一供应商的同一二进制文件中也是如此。

于 2014-01-29T04:12:19.740 回答