Поддерживается ли концепция модуля Fortran ISO_C_BINDING поставщиками компиляторов C/C++? Например, размер C/C++ int
может варьироваться между компиляторами разных производителей. Итак, с модулем ISO_C_BINDING мы знаем, что тип Fortran C_INT
составляет 4 байта; а не просто иметь вид 4. Но мы до сих пор не знаем размер int
вообще в C/C++. Я прав? Возможно, есть стандартный C/C++ ISO_C_BINDING-совместимый переключатель компилятора?
ISO_C_BINDING между разными поставщиками Fortran и C
Ответы (2)
Насколько я знаю, стандарт требует соответствия типов только в одной и той же цепочке инструментов. Таким образом, вам лучше использовать C-компилятор того же производителя. Я думаю, стандарт ничего не говорит о размерах видов C_.
Правка: только что посмотрел в стандарте, там всегда упоминается сопутствующий C-компилятор.
Большинство операционных систем предоставляют C API, что, очевидно, подразумевает наличие стандартного C ABI на этой платформе. Обычно компиляторы C используют этот ABI, но могут быть некоторые особенности (например, стандартным соглашением о вызовах для Windows API является stdcall, который не поддерживает функции с переменным числом переменных, поэтому существует второе важное соглашение о вызовах, называемое cdecl).
Ситуация с C++ не столь однозначна: большинство операционных систем не предоставляют C++ API (есть исключения, такие как BeOS/Haiku), поэтому поставщики компиляторов могут делать все, что считают нужным, что приводит к несовместимости между компиляторами из разных поставщиков, а иногда даже между разными версиями одного и того же компилятора. Я думаю, по крайней мере, GCC стабилизировал свой C++ ABI, но я понятия не имею об общей ситуации...