Tatsache ist, dass mehr C Compiler einem gemeinsamen ABI (Application Binary Interface) folgen, als C++ Compiler. Es ist jedoch nicht richtig zu sagen, dass das Binärinterface von C Programmen Compilerunabhängig wäre, oder das der C Standard ein ABI spezifiziert. Kategorisch betrachtet gibt es da keinen Unterschied zwischen C und C++.C++ ist eine weiterentwicklung von C, also C lebt (mit ein paar wenigen Modifikationen) in C++ weiter.
C, bzw der C Anteil im C++, hat aber einen wesentlichen Vorteil: Er ist viel genauer, und vor allem binaer spezifiziert.
Das heisst, das C Strukturen, pointer, typen .... zueinander compilerunabhaengig sind, waehrend bei c++ dem compiler viel mehr freiheit wegens optimierungen gelassen wird.
Es ist ebenfalls falsch, dass es kein gemeinsames ABI für C++ gäbe. Zumindest für Linux Rechner ist das Itanium C++ ABI die verbreitete Konvention (auch für nicht-Itanium Rechner). Es ist derzeit mindestens vom GCC, vom Intel C++ Compiler, vom Pathscale Compiler und vom Open64 Compiler implementiert. Möglicherweise soll auch der in der Entwicklung befindliche Clang Compiler diesem ABI unter Linux folgen. Das deckt schon einmal eine ganze Menge ab. Nicht kompatibel ist glaube ich der Compiler von Comeau.
Auf Macosx werden die C++ Compiler sicherlich auch einem gemeinsamen ABI folgen - zumindest GCC und Clang.
Wichtig ist auch, das die ABI Kompatibilität sowohl bei C als auch bei C++ im Prinzip nur den Kern der jeweiligen Sprache abdeckt. Wenn man z.B. C FILE* Objekte Implementierungsübergreifend verwenden möchte wird man wohl nicht Erfolg haben.
Wegen all dem stimmt das hier also nicht:
Im Klartext heisst das, das alles was ueber compilergrenzen gehen soll, C sein muss, waehrend man bei c++ einen compiler definieren muesste.
Lesezeichen