Beziehung zwischen C und C ++

8

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?

    
Armen Tsirunyan 08.12.2010, 14:32
quelle

6 Antworten

7

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.

    
David Thornley 08.12.2010, 14:39
quelle
4

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.

    
Justin Niessner 08.12.2010 14:35
quelle
3

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.

    
Marcelo Cantos 08.12.2010 14:37
quelle
3

Ein interessanter Artikel von Bjarne Stroustrup, der etwas zum Thema beleuchtet: Geschwisterrivalität: C und C ++ (pdf)

    
Nemanja Trifunovic 08.12.2010 15:22
quelle
1

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.

    
Jens Gustedt 08.12.2010 15:02
quelle
1
  

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

zu bringen     
Martin York 08.12.2010 15:22
quelle

Tags und Links