繁体   English   中英

C和C ++中类型的互操作性

[英]Interoperability of types in C and C++

一个非常简单的问题:在同一系统上,是否有任何保证C int与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 ++标准似乎想表明你可以使用extern "C"调用C函数,但我不确定它是否提供了足够的其他保证?

没有。

在x64 amd兼容的cpus上广泛使用的符合编译器,默认情况下long 32位,其他为64位。 因此,对于同一系统上的两个C ++编译器来说,情况甚至不是这样,更不用说C ++和C编译器了。

在一个编译器中,如果它们兼容,则由编译器供应商决定。 他们通常(总是)。 “一个编译器”在这里有点用词:C snd C ++编译器是不同的编译器,即使在同一个供应商的同一个二进制文件中,在某种意义上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM