一个非常简单的问题:是否可以保证在同一系统上int
C 与 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"
,但我不确定它是否提供了足够的其他保证?