C / C ++编译器供应商是否也支持Fortran ISO_C_BINDING模块的概念?例如,C / C ++ int
的大小可能因不同供应商的编译器而异。因此,使用ISO_C_BINDING模块,我们知道Fortran C_INT
类型是4个字节;而不仅仅是只有一个种 4.但是,我们仍然不知道C / C ++中int
的大小。我对么?是否有可能与标准C / C ++ ISO_C_BINDING兼容的编译器开关?
答案 0 :(得分:5)
据我所知,该标准只要求在同一工具链中匹配类型。因此,您最好使用同一供应商提供的C-Compiler。我认为该标准没有声明C_种类的大小。
编辑:只是在标准中查找,它总是在讨论配套的C编译器。
答案 1 :(得分:2)
大多数操作系统都公开了一个C API,这显然意味着该平台上存在标准的C ABI。通常,C编译器使用此ABI,但可能存在一些特性(例如,Windows API的标准调用约定是stdcall,它不支持可变参数函数,因此存在第二个主要的调用约定,称为cdecl)。
C ++的情况并不明确:大多数操作系统都没有公开C ++ API(有BeOS / Haiku等例外),因此编译器供应商可以自由地做任何他们最好的事情,导致它们之间不兼容来自不同供应商的编译器,有时甚至是同一编译器的不同版本之间。我认为至少GCC已经稳定了他们的C ++ ABI,但我对一般情况一无所知......