Als Stroustroup C ++ entwarf, war eines seiner Ziele, dass C ++ so viel wie möglich eine Obermenge von C war. Ich verstehe, dass dies nicht 100% der Fall ist, aber der meiste gute Code in C ist auch C ++ - Code.
Aber ich höre, dass C99 viele Dinge unterstützt, die C ++ nicht hat (wie VLA) und dass es sogar C1x oder C0x geben wird, wie es auch heißen mag. Also, C ++ ist eine Obermenge von nur alten C89 und von da an entwickeln sich C und C ++ ziemlich unabhängig voneinander?
C ++ ist eine nahe Obermenge von C89 / C90. (Ich empfehle nicht, den Code zu schreiben, um ihn als C oder C ++ kompilieren zu können.) Seitdem divergierte C99. Der neue C ++ - Standard (oft als C ++ 0x bezeichnet) wird versuchen, kompatibler zu sein, wird aber keine C99-Arrays variabler Länge haben. Stroustrup hat seine Enttäuschung über einige der Aktionen des C-Komitees zum Ausdruck gebracht, da er erwartet hat, dass sie versuchen werden, näher an der C ++ - Kompatibilität zu bleiben.
Also, ja, die Sprachen divergieren.
Das ist richtig. C ++ begann als eine Obermenge von C, als es ursprünglich entwickelt wurde. Seit dieser Zeit sind die beiden unabhängig voneinander gewachsen.
Es gibt einen konzertierten Versuch, die Sprachen so kompatibel wie möglich zu halten, und C ++ 0x wird einige Änderungen von C99 übernehmen. Es ist jedoch wahrscheinlich, dass sie bis zu einem gewissen Grad divergieren werden, wobei die VLA die größte Diskrepanz darstellen. Ich weiß nicht, dass C ++ auch restrict
übernehmen wird.
Ein interessanter Artikel von Bjarne Stroustrup, der etwas zum Thema beleuchtet: Geschwisterrivalität: C und C ++ (pdf)
Sogar für das alte C, auch bekannt als C89, ist der Unterschied unter der Haube schwierig zu handhaben, kehrt von Operatoren zurück, die für den einen und nicht den anderen Wert sind, Kontrollfluss, der für den einen und nicht für den anderen gültig ist usw. Wo sie sind ok ist auf einer Schnittstellenebene für Funktionen mit Prototypen, struct
etc.
Bei neueren Versionen der Sprachen weicht dies noch mehr ab, da selbst die Kompatibilität der Schnittstellen schwierig zu verwalten ist. C99 hat bereits das Schlüsselwort static
für Grenzen von Array-Funktionsparametern, die Konzepte von Kompilierzeitkonstanten sind in beiden Sprachen ziemlich unterschiedlich, C ++ startet alte Schlüssel wiederverwenden ( auto
) und verwendet übermäßig neue Schlüsselworte, die nicht in einem reservierten Namespace sind ...
Ja, ich denke, die Kluft wird wachsen, und es wäre wahrscheinlich besser für beide Gemeinschaften, die Scheidung zuzulassen und zu versuchen, getrennt miteinander auszukommen.
aber der meiste gute Code in C ist auch C ++ Code.
Nein.
Ich würde sagen, dass der meiste gute C-Code mit einem C ++ - Compiler kompilierbar ist.
Das macht es nicht C ++ - Code.
C ++ ist eine Obermenge nur des alten C89 und von da an entwickeln sich C und C ++ ziemlich unabhängig voneinander?
C ++ basierte auf C89.
C wurde mit C99 erweitert, von dem sehr wenig in C ++ 03 enthalten war
Es gibt laufende Bemühungen, den Unterschied zu minimieren und die Sprachen näher (wo es sinnvoll ist) für C ++ 0x
Tags und Links c c++ compatibility