2

C/C++ 编译器供应商是否也支持 Fortran ISO_C_BINDING 模块的概念?例如,C/C++ 的大小int可能因不同供应商的编译器而异。因此,使用 ISO_C_BINDING 模块,我们知道 FortranC_INT类型是 4 个字节;而不仅仅是一种4。但是,我们仍然不知道intC/C++ 中的一般大小。我对么?是否有标准的 C/C++ ISO_C_BINDING 兼容编译器开关?

4

2 回答 2

5

据我所知,该标准只要求在同一工具链中匹配类型。因此,您最好使用同一供应商的 C 编译器。我认为,该标准没有要求 C_ 种类的大小。

编辑:只是在标准中查找它,它总是在谈论配套的 C 编译器。

于 2012-02-12T11:27:35.007 回答
2

大多数操作系统都公开了 C API,这显然意味着该平台上存在标准 C ABI。通常,C 编译器使用此 ABI,但可能有一些特殊性(例如,Windows API 的标准调用约定是 stdcall,它不支持可变参数函数,因此有第二个主要调用约定称为 cdecl)。

C++ 的情况并不那么明确:大多数操作系统不公开 C++ API(BeOS/Haiku 等例外),因此编译器供应商可以自由地做他们认为最好的事情,导致不同编译器之间的不兼容供应商,有时甚至在同一编译器的不同版本之间。我认为至少 GCC 已经稳定了他们的 C++ ABI,但我不知道一般情况......

于 2012-02-12T12:42:45.033 回答