Tri*_*dle 7 c c++ language-interoperability language-lawyer
一个非常简单的问题:在同一系统上,有没有保证C int与C++是同一个东西int?
毫无疑问,这当然是纯粹的理论问题.
C和C++标准使用相同的语言来定义基本类型.但Fortran 2003明确表示
use ISO_C_BINDING
integer(kind=c_int) :: i
Run Code Online (Sandbox Code Playgroud)
声明一个与int"伴随C处理器"上的类型兼容的整数类型,我在C++标准中找不到任何这样的断言.Fortran提供比C++更强大的C互操作性保证似乎很奇怪!
我能找到的最接近的是7.5节[dcl.link],C++ 11标准的第3段,其中指出了这一点
每个实现都应提供与用C编程语言编写的函数的链接
但是这个小句子(对我而言)似乎不足以保证基本类型的兼容性.
C++标准中是否有其他一些我忽略的语言可以保证这一点,或者它是否显然被认为是理所当然的,没有人打扰明确说明它?
编辑:大卫施瓦茨在评论中指出,当我说"同一系统"时,我是不精确的.我真的是指同一个"平台",即硬件,操作系统,系统库等.当然,它确实是一个ABI问题.在引用的段落中,C++标准似乎想表明你可以调用C函数extern "C",但我不确定它是否提供了足够的其他保证?
没有.
在x64 amd兼容的cpus上有广泛使用的符合编译器long,默认情况下将其视为32位,其他编码为64位.因此,对于同一系统上的两个C++编译器来说,情况甚至不是这样,更不用说C++和C编译器了.
在一个编译器中,如果它们兼容,则由编译器供应商决定.他们通常(总是)."一个编译器"在这里有点用词:C snd C++编译器是不同的编译器,即使在同一个供应商的同一个二进制文件中,在某种意义上.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |