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