Совместимость типов в C и переполнении стека

Очень простой вопрос: есть ли гарантии, что C int это то же самое, что C ++ intв той же системе?

Само собой разумеется, что это, конечно, чисто теоретический вопрос.

Стандарты C и C ++ используют один и тот же язык для определения основных типов. Но в то время как Фортран 2003 дает понять, что

use ISO_C_BINDING
integer(kind=c_int) :: i

объявляет целочисленный тип, который совместим с int наберите на «сопутствующем процессоре C», я не могу найти такого утверждения в стандарте C ++. Кажется очень странным, что Fortran обеспечил бы более сильные гарантии совместимости C, чем C ++!

Наиболее близким я могу найти раздел 7.5 [dcl.link], абзац 3 стандарта C ++ 11, в котором говорится, что

Каждая реализация должна обеспечивать связь с функциями, написанными на языке программирования C

Но это небольшое предложение (для меня) не кажется достаточно сильным, чтобы гарантировать совместимость основных типов.

Есть ли какой-то другой язык в стандарте C ++, который я упустил, который гарантирует это, или это так очевидно, как само собой разумеющееся, что никто не удосужился заявить об этом явно?

РЕДАКТИРОВАТЬДэвид Шварц в комментариях указывает, что я был неточен, когда сказал «та же система». Я действительно имел в виду ту же «платформу», то есть аппаратное обеспечение, ОС, системные библиотеки и т. Д. Это действительно проблема ABI, конечно. В цитируемом отрывке стандарт C ++, кажется, хочет указать, что вы можете вызывать функции C с extern "C", но я не уверен, предоставляет ли он достаточно других гарантий?

5

Решение

Нет.

На x64-совместимых процессорах, совместимых с amd, широко используются соответствующие компиляторы. longкак 32-битные и другие как 64-битные по умолчанию. Так что это даже не относится к двум компиляторам C ++ в одной системе, не говоря уже о компиляторах C ++ и C.

Внутри одного компилятора, это зависит от поставщика компилятора, если они совместимы. Они обычно (всегда). «один компилятор» здесь немного ошибочен: компиляторы C и C ++ — это разные компиляторы, даже если в некотором смысле они находятся в одном и том же двоичном файле одного и того же поставщика.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]