ISO_C_BINDING между различными поставщиками Fortran и C - PullRequest
2 голосов
/ 12 февраля 2012

Поддерживается ли концепция модуля 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-совместимый переключатель компилятора?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

Насколько я знаю, стандарт требует соответствия типов в одной и той же цепочке инструментов. Таким образом, вам лучше использовать C-Compiler от того же производителя. Я думаю, что стандарт ничего не говорит о размерах видов C_.

Редактировать: Только что посмотрел в стандарте, он всегда говорит о компиляторе C-компаньона.

2 голосов
/ 12 февраля 2012

Большинство операционных систем предоставляют C API, что, очевидно, предполагает наличие стандартного C ABI на этой платформе. Обычно компиляторы C используют этот ABI, но могут быть некоторые особенности (например, стандартным соглашением о вызовах для Windows API является stdcall, который не поддерживает функции с переменным числом, поэтому существует второе основное соглашение о вызовах, называемое cdecl).

Ситуация с C ++ не столь ясна: большинство операционных систем не предоставляют API C ++ (есть исключения, такие как BeOS / Haiku), поэтому поставщики компиляторов могут делать все, что могут, что приводит к несовместимости между ними. компиляторы от разных производителей, а иногда даже между разными версиями одного и того же компилятора. Я думаю , по крайней мере, GCC стабилизировал их C ++ ABI, но я понятия не имею об общей ситуации ...

...