Наиболее важной причиной является то, что библиотека C ABI также является стандартной библиотекой ABI, по крайней мере, в Linux, Windows и Mac. Другими словами, эти библиотеки можно использовать на любом языке (который поддерживает использование внешних библиотек).
C ++ - это отдельная история. Например, нет стандартного ABI для C ++ vtable. Кроме того, для поддержки перегрузок методов и функций, а также пространств имен C ++ выполняет сортировку имен для символов. Кроме того, исключения - это еще одна вещь, которая влияет на то, как вызываются функции, и для этого могут даже потребоваться определенные переключатели компилятора, даже если используется тот же компилятор.
Можно было бы просто написать «C» с помощью C ++ и экспортироватьтолько extern "C"
символов, но если вы это сделаете, вы также можете использовать C, чтобы избежать сложности смешивания языков.