- Sollte ich den Begriff C / C ++ nicht mehr verwenden?
Absolut. Es ist nicht klar, was dieses Konstrukt ausdrücken soll, es sei denn, es besteht möglicherweise Verwirrung darüber, was C und C ++ im Namen der Person sind, die den Begriff verwendet.
Da diese Verwirrung eine so häufige Ursache für Frustration ist, sind viele Menschen ziemlich emotional geworden, und das Erscheinen dieses Begriffs allein ist Grund genug für sie, Ihren Beitrag negativ zu bewerten. Das mag albern erscheinen, aber es scheint das zu sein, was wir haben.
Ich empfehle, anstatt von „C / C ++“ zu sprechen, einen Begriff zu verwenden, der deutlich macht, was Sie meinen.
Wenn Sie über etwas in C sprechen , die nicht auch wahr sein könnten oder für C ++, sagt einfach C .
Beispiel: Wie soll die main
Funktion in C deklariert werden?
Auf den ersten Blick scheint die Antwort für C ++ dieselbe zu sein: int main()
oder int main(int, char**)
. Im weiteren Verlauf der Diskussion kann es jedoch relevant sein, darauf hinzuweisen, dass die Funktion in C ++ im globalen Bereich deklariert werden muss, was in C keinen Sinn ergibt, da sie keine namespace
s enthält. Andererseits erlaubt C das main
rekursive Aufrufen, während C ++ dies nicht tut. In C ++ gibt es einen impliziten return 0;
Fehler, main
aber in C ist die return
Anweisung für jeden Pfad erforderlich. Die Liste geht weiter und es macht die Diskussion viel einfacher, wenn Sie vorher klarstellen, welche Sprache diskutiert werden soll.
Wenn Sie über etwas in C ++ sprechen, das möglicherweise auch für C zutrifft oder nicht, sagen Sie einfach C ++ .
Beispiel: Wird ein malloc()
ed-Array von int
s in C ++ anfänglich nur aus Nullen bestehen?
Die kurze Antwort für C ist zufällig dieselbe: nein. Aber im weiteren Verlauf der Antwort könnte es sich lohnen, darauf hinzuweisen, dass in C calloc
eine gute Alternative wäre, während in C ++ die Verwendung von a std::vector<int>
möglicherweise die bessere Wahl gewesen wäre.
Wenn Sie auf eine Ähnlichkeit zwischen C und C ++ hinweisen möchten, sagen Sie C und C ++ .
Beispiel: In C und C ++ ist die sizeof
an- int
Implementierung definiert und kann zwischen Compilern und Architekturen variieren.
An dieser Stelle möchten wir darauf hinweisen, dass sich C und C ++ gleich verhalten. Wir sprechen explizit über beide Sprachen.
Ich empfehle Ihnen sogar, noch genauer zu sein und nicht nur über "C" oder "C ++" zu sprechen, sondern auch über die genaue Version. Beide Sprachen entwickeln sich und eine stumpfe Aussage wie
C ++ unterstützt /* … */
und // …
kommentiert, während C nur den /* … */
Stil unterstützt .
ist weder richtig noch falsch.
- Wenn die Antwort auf # 1 Ja lautet, wie würde ich ein Programm aufrufen, das eine Mischung aus C und C ++ verwendet?
Da sich die Sprachen überschneiden, enthält jedes C-Programm Teile , die wie C ++ aussehen könnten und umgekehrt. Dennoch werden sich die Autoren wahrscheinlich darauf geeinigt haben, entweder einen C- oder einen C ++ - Compiler zu verwenden. Sagen Sie also "das Programm ist in C geschrieben ", wenn es mit einem C-Compiler kompiliert wurde, und "das Programm ist in C ++ geschrieben ", wenn sie einen C ++ - Compiler verwenden, auch wenn sie möglicherweise die Verwendung moderner C ++ - Funktionen verweigern. Einige Leute bezeichnen solchen C ++ - Code als C ++ im C-Stil . Das Fehlen von Überladung, Ausnahmen, Polymorphismus, Vorlagen und I / O-Streams ist ein gemeinsames Merkmal eines solchen Codes.
Wenn stattdessen einige Dateien in C geschrieben und mit einem C-Compiler kompiliert werden und einige andere Dateien in C ++ geschrieben und mit einem C ++ - Compiler kompiliert werden und dann die Objektdateien miteinander verknüpft werden, würde ich sagen, dass „das Programm in a geschrieben ist Mischung aus C und C ++ “, wie Sie es bereits getan haben.
Wenn die Autoren jedoch große Sorgfalt darauf verwendet haben, jede einzelne Datei so zu schreiben, dass sie mit einem C- oder C ++ - Compiler kompiliert werden kann und das resultierende Programm dasselbe tut, könnte man sagen, dass „das Programm wird in einer gemeinsamen Teilmenge von C und C ++ geschrieben. “
Letzteres ist häufig bei Header-Dateien der Fall, die von C- und C ++ - Code gemeinsam genutzt werden sollen. Das Schreiben eines solchen Codes ist übrigens nicht einfach. Wenn Sie weiter betonen wollen , dass nur solche Konstrukte wurden verwendet , die gültig sind in C und C ++ und werden häufig von verschiedenen Compiler - Herstellern unterstützt, der Begriff eine tragbare gemeinsame Teilmenge von C und C ++ verwendet wird , kann dies zu betonen.
- Angesichts der Tatsache, dass es sich bei beiden Sprachen um „unterschiedliche“ Sprachen handelt, werden C ++ - Compiler wahrscheinlich irgendwann keinen Code mehr in der C-Sprache unterstützen (da modernes C ++ bei grundlegenden Dingen wie Zeigern, dynamischem Speicherhandling usw. von der C-Mentalität abweicht).
Ich bin nicht sicher, ob ich diese Frage verstehe. Da C und C ++ sind verschiedene Sprachen, können Sie nicht ein Compiler für einen von ihnen erwarten , dass ein Programm übernimmt für die andere geschrieben. Compiler sind jedoch häufig modular aufgebaut. Wenn ein Compiler über ein C ++ - Front-End verfügt , stehen die Chancen gut, dass er auch über ein C-Front-End verfügt. (Sie würden dann über eine Befehlszeilenoption oder ein ähnliches Mittel auswählen, welche von ihnen Sie möchten.) Solange beide Sprachen weit verbreitet sind, ist es sehr unwahrscheinlich, dass sich dies ändern wird. Ihr Standpunkt zu "modernem C ++" ist meiner Meinung nach im Wesentlichen eine Frage guter Codierungsstandards und der Standardbibliothek. Aus Sicht des Compilers ist die Entwicklung beider Sprachen eher konvergierend als divergierend.
- Gibt es derzeit eine Zusammenarbeit zwischen den Leuten, die die Standards von C / C ++ festlegen, um die Kompatibilität zu gewährleisten?
Ja. Das in C ++ 11 und C11 eingeführte Speichermodell und die atomare Operationsbibliothek sind ein gutes Beispiel. Es scheint, dass die Designer beider Sprachen erkennen, dass Kompatibilität wichtig ist, und daran arbeiten, sie zu verbessern. Persönlich würde ich mir wünschen, dass die Zusammenarbeit intensiver und die beiden ISO-Arbeitsgruppen vielleicht sogar zusammenarbeiten, aber meine Wünsche sind nicht wichtig.
Bjarne Stroustrup spricht über die Unterschiede und Gemeinsamkeiten zwischen den verschiedenen Versionen von C und C ++ in § 44.3 der 4. Ausgabe der Programmiersprache C ++ , die ironischerweise den Titel „C / C ++ - Kompatibilität“ trägt. Die Verwendung des Begriffs könnte in diesem Fall tatsächlich angemessen sein, da klar ist, was gemeint ist.
- Wenn # 4 ja ist, könnte eine solche Zusammenarbeit in naher Zukunft mit dem Erscheinen des modernen C ++ enden (14.11.17)
Wie oben erläutert, ist dies in C ++ 11 geschehen und es wird erwartet / gehofft / benötigt, dass es erneut passiert.