Ich verstehe, dass C und C ++ verschiedene Sprachen sind, aber als ich C ++ lernte, wurde mir immer gesagt, dass C eine Teilmenge von C ++ ist oder C ++ C mit Klassen ist. Und das war bis zum Erscheinen von C ++ x0, C ++ 11 (oder dem modernen C ++ 11/14/17 im Allgemeinen) ganz richtig. Tatsächlich (insbesondere bei eingebetteten Systemen) ist es sehr wahrscheinlich, dass in C ++ geschriebener Code gefunden wird, aber viele Teile vollständig in reiner C-Sprache geschrieben sind. Hier habe ich mehrere Fragen:
- Sollte ich den Begriff C / C ++ nicht mehr verwenden?
- Wenn die Antwort auf # 1 Ja lautet, wie würde ich ein Programm aufrufen, das eine Mischung aus C und C ++ verwendet?
- Angesichts der Tatsache, dass beide Sprachen "unterschiedlich" sind, ist es wahrscheinlich, dass C ++ - Compiler 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).
- Gibt es im Moment eine Zusammenarbeit zwischen den Leuten, die die Standards von C / C ++ erstellen, um die Kompatibilität aufrechtzuerhalten?
- Wenn # 4 ja ist, könnte eine solche Zusammenarbeit in naher Zukunft mit dem Erscheinen des modernen c ++ enden (14.11.17)
Ich weiß, dass es bereits ähnliche Fragen gibt, aber ich bin mir sicher, dass viele Menschen diese Fragen teilen. Daher bin ich sehr daran interessiert, gute Antworten zu erhalten, insbesondere für die Punkte, die in naher Zukunft mit der C ++ - Tendenz zu tun haben.
quelle
Should I stop using the term C/C++
. Ja. Dies wird nur von Personalvermittlern und der Personalabteilung verwendet. Ingenieure verwenden den BegriffC
oderC++
als unabhängige Sprachen. Wenn Sie einen Ingenieur finden, der den Begriff mischt, meiden Sie ihn.Antworten:
C war nie eine Teilmenge von C ++. Das offensichtlichste Beispiel dafür ist
int new;
. Dies gilt seit C89 und C ++ 98, und die Sprachen sind mit dem Erscheinen neuer Standards immer weiter voneinander gewachsen.Ja
Eine Quelldatei ist in der einen oder anderen Sprache geschrieben. Ein Programm kann aus Code aus mehreren Sprachen bestehen, die zusammenarbeiten, oder aus einer ausführbaren Datei, die durch Verknüpfen verschiedener kompilierter Objekte erstellt wird. Sie würden sagen, das Programm wurde in C und C ++ geschrieben, "C / C ++" ist keine Sprache.
3) Sie haben es nie getan.
char *a = malloc(10);
. C und C ++ waren noch nie vollständig kompatibel, solange sie ISO-Standards hatten (ich kenne nicht alle Details zu den vorstandardisierten Tagen). Klicken Sie auf die Links oder sehen Sie unten nach, welche Datei mit C89 und höher kompatibel ist, aber unter keinem C ++ - Standard gültig ist.4) afaik nein, die arbeitsgruppen sind sich bewusst, aber die standards treffen die entscheidungen, die für sie am besten sind.
Ich fühle mich immer ist es erwähnenswert , dass C ist eine Teilmenge von Objective-C.
quelle
javac
, aber worum geht es?C/Fortran/sh
jetzt sinnvoll ?! ioccc.org/years-spoiler.html#1986 .Es muss einen Grund geben, warum diese Begriffe so oft zusammenkommen. Während Sie Ihrem C-Lehrer nicht sagen sollten, dass seine Sprache eine Teilmenge von C ++ ist, gibt es hier einige Wahrheiten. Andere haben bereits die Sichtweise Ihres Lehrers enthüllt. Das ist sehr schön (und mit Beispielen usw. illustriert). Aber wir leben nicht in einem Elfenbeinturm oder einem Buch.
Ihr Chef könnte sich nicht weniger für die genaue Sprache interessieren, die Sie verwendeten. Wenn er sich ein wenig mit Programmieren auskennt, sagen Sie ihm einfach, dass Sie C / C ++ verwendet haben, und es klingt wie "Ich habe eine Sprache verwendet, die für den Maschinencode kompiliert werden muss, mit DLLs und all den komplizierten Dingen". Dies ist der Teil "Externe Kommunikation".
Wenn Sie eine Bibliothek erstellen, die sowohl mit C als auch mit C ++ kompatibel ist, möchten Sie sie unbedingt C / C ++ - Bibliothek nennen. Natürlich wird jemand eine Hand heben und fragen, warum Sie dies nicht eine C-Bibliothek nennen, die zufällig einen C ++ - Wrapper hat, und trotzdem kann C ++ eine Verknüpfung zu C-Bibliotheken herstellen, sodass Sie es überhaupt nicht erwähnen müssen. Beantworten Sie einfach: "Ja, Sie haben Recht, dies ist eine C / C ++ - Bibliothek". Dies ist der Teil "Interne Kommunikation".
Wenn Sie einen lexikalischen Analyzer für C ++ erstellen, werden Sie überrascht sein, wie gut er mit C funktioniert. Möglicherweise müssen Sie nicht alle Änderungen vornehmen. Dies ist die "wenn es aussieht wie eine Ente, etc." Teil.
Usw.
Die meisten C-Programme, die ich jemals gesehen habe, kompilieren (und arbeiten) ohne Änderung als C ++ - Code. Lassen Sie sich nicht von ein paar Ausnahmen oder dogmatischen (jedoch einflussreichen) Programmierern täuschen. C und C ++ sind so nah beieinander und so oft kompatibel und so oft gemischt und aufeinander abgestimmt, dass der Begriff C / C ++ verwendet wird. Es wird verwendet, weil es nützlich ist, solche Situationen zu beschreiben, in denen es nicht wirklich wichtig ist, ob Sie C oder C ++ in Betracht ziehen, sofern es sich nicht um Java oder PHP handelt . Wir wissen, dass es "falsch" ist, aber es ist uns egal, es ist nützlicher als falsch.
Es mag missbraucht werden, es mag dumm sein, aber ich bin mir nicht sicher, welchen Nutzen es haben wird, wenn Sie pedantischer als nötig sind und sich weigern, in Begriffen zu kommunizieren, die andere verstehen. Wenn Sie sich in einer bestimmten Situation unwohl fühlen, verwenden Sie einfach nicht den Oberbegriff C / C ++, sondern den für den Fall relevanten (entweder C oder C ++).
Hab keine Angst vor der Zukunft. Unsere Betriebssysteme sind in C geschrieben. Ein Großteil der aktuellen C / C ++ - Softwareproduktion findet in C ++ statt. Dieses Paar ist für eine Weile hier. Niemand hat Interesse daran, dass das eine mit dem anderen inkompatibler wird (genau umgekehrt).
Um genau zu sein über Ihre Punkte:
1) Es kommt darauf an. Ja, wenn es zu Verwirrung führen kann, wenn Sie sich unwohl fühlen oder wenn es einfach falsch oder aus dem Zusammenhang geraten ist. Nein, wenn Sie es für angemessen halten.
2) N / A
3) Ich denke nein, aber ich habe keine Kristallkugel.
4) keine Ahnung
5) Ich denke nicht, da nichts in diese Richtung drängt
quelle
C/C++
ist dies nicht eindeutig und daher nicht sinnvoll. In Anlehnung an Ihre BeispieleC/C++ library
könnte a entweder eine C-Bibliothek mit einem C ++ - Wrapper oder eine C ++ - Bibliothek mit einem C-Wrapper bedeuten. Oder es könnte bedeuten, dass die Bibliothek aus mehreren Modulen besteht, einige mit C ++ kompiliert, andere mit C. Dies ist überhaupt nicht klar. Zu sagen, dass eine Bibliothek erstellt wird, ist für michC and C++
viel klarer oderC library with compatibility with C++
auch viel klarer. Und hier ist die Mehrdeutigkeit mit nur zwei Sprachen, stellen Sie sich vor, Sie verwenden diese "Kommunikationsstrategie" für mehr ...Gegen den Strom würde ich sagen, dass es vom Kontext abhängt .
Der Begriff "C / C ++" ist normalerweise nicht angemessen, wenn man so etwas wie "Dies ist ein C / C ++ - Programm" sagt, aber dies wurde in anderen Antworten eingehend untersucht.
Es kann jedoch Kontexte geben, in denen C / C ++ geeignet sein kann.
quelle
or
, nicht als logischxor
. Es ist also entweder eins oder beides. In Stellenangeboten kennen Sie entweder C oder C ++ oder beides. Ich habe das Gefühl, dass viele Leute religiös über den Begriff sind. Ein guter C-Programmierer kann C ++ problemlos lernen, unabhängig davon, wie unterschiedlich beide Sprachen sind. Ich habe mit dem Programmieren von PHP begonnen und bin dann zu Scala (zwei völlig verschiedene Sprachen) gewechselt. Warum sollte ein C-Programmierer nicht in der Lage sein, C ++ oder umgekehrt zu lernen? Der C / C ++ - Ausdruck hat einige Vorteile, wenn er im richtigen Kontext verwendet wird.Es gibt viele subtile Unterschiede zwischen C und C ++. In C ++ hat eine
const
Variable im globalen Bereich beispielsweise eine interne Verknüpfung, sofern dies nicht deklariertextern
ist, in C jedoch eine externe Verknüpfung, sofern dies nicht deklariert iststatic
. Mit "C / C ++" bestätigt das OP das Wissen, dass die Antwort auf ihre Frage sowohl in C als auch in C ++ gleich ist, wenn dies nicht unbedingt der Fall ist. Dies erschwert den potenziellen Antwortenden unnötigerweise die Arbeit.Manchmal stellen wir fest, dass der Code in der einen oder anderen Sprache nicht gültig ist (implizite Konvertierungen von
void*
zu Zeiger auf Objekt sind beispielsweise in C ++ nicht gültig). Das ist nervig. Warum sagen Sie "C / C ++", wenn Sie einen Code haben, der in C, aber nicht in C ++ gültig ist? Wollten Sie C oder ist dies nur ein Fehler im Code, der C ++ sein soll?Manchmal ist die Antwort je nach Sprache unterschiedlich (z. B. gibt es in C99 Arrays mit variabler Länge, aber nicht in C ++). Wenn wir nicht wissen, über welche Sprache Sie sprechen, müssen wir entweder raten oder eine Antwort für beide schreiben, wenn nur eine tatsächlich nützlich ist, da Sie wissen, welche Sprache Sie tatsächlich verwenden. du sagst es uns einfach nicht!
Manchmal ist die Antwort für beide Sprachen wirklich gleich, aber es ist schwer, sicher zu sein. Ich denke zum Beispiel, dass C und C ++ die gleichen Regeln für die Konvertierung ganzer Zahlen haben, aber um wirklich, wirklich sicher zu sein, muss ich beide Standards sorgfältig lesen. Auch hier mache ich doppelt so viel Arbeit wie nötig, wenn Sie sich wahrscheinlich nur für eine der Sprachen interessieren.
Wie auch immer, um Ihre anderen Fragen zu beantworten:
Ja.
Wenn Sie C- und C ++ - Code miteinander verknüpfen, können Sie beide Tags verwenden. Geben Sie jedoch an, in welcher Sprache sich die einzelnen Dateien befinden.
Es gibt manchmal wichtige Änderungen, aber sie sind selten und haben in der Regel nur eine begrenzte Auswirkung (andernfalls werden sie nicht genehmigt). Zum Beispiel
auto
in C ++ 11.Ich glaube nicht, dass sie direkt zusammenarbeiten, aber sie achten auf Entwicklungen in der anderen Sprache und versuchen, Änderungen zu vermeiden, die die Kompatibilität erschweren würden.
Und wenn Sie wirklich beide Sprachen kennen lernen wollen, ist das in Ordnung, und das können Sie in Ihrer Frage sagen. Wenn Sie "C / C ++" sagen, bin ich mir nicht sicher, was Sie meinen, und es sieht wirklich so aus, als würden Sie eine Vermutung über die beiden Sprachen anstellen.
quelle
struct class
in so etwas wiestruct klass
und umzubenennen dann wird er immer von Linus abgeschossen.C war noch nie eine Teilmenge von C ++. Zum Beispiel ist C89 keine Teilmenge von C ++ 98.
Einige Beispiele:
int
vsbool
)Ja.
Ein Programm ist entweder C oder C ++ (wenn selbst ein sehr einfaches Programm entweder mit einem C- oder einem C ++ - Compiler kompiliert werden kann). Welchen Compiler verwenden Sie, um es zu kompilieren? Es sollte Ihre Frage beantworten. Harbison & Steele haben den Begriff Clean C geprägt , um eine gemeinsame Teilmenge von C und C ++ zu bezeichnen, aber ich denke, es war eine schlechte Idee.
BEARBEITEN : Allerdings gebe ich zu, dass Sie technisch C- und C ++ - Objektdateien in einem einzigen Programm verknüpfen können, aber es gibt viele Sprachen, die in einem einzigen Programm gemischt werden dürfen, zum Beispiel Java und C ++. Ich denke, dass die Verwendung des Begriffs C / C ++ - Programm nur zu der Verwirrung beiträgt, dass es in einer einzigen Sprache namens C / C ++ geschrieben ist.
Es gibt viele Funktionen (Beispiel: Array variabler Länge, flexibles Array-Mitglied,
_Generic
...) von C99 oder C11, die von keiner C ++ - Version unterstützt werden.quelle
Einige Programme sind in einer Mischung aus C und C ++ geschrieben
Dies ist nur eine Tatsache des Lebens. Sie können Objektdateien aus C und C ++ kompilieren und miteinander verknüpfen. Das Ergebnis kann durchaus als "C / C ++ - Programm" bezeichnet werden.
Aber das ist nur das Programm als Ganzes. Was ist mit den einzelnen Zusammenstellungseinheiten?
Es gibt eine Teilmenge von C, die auch eine Teilmenge von C ++ ist
Ein in dieser Untermenge geschriebenes Programm (oder eine Kompilierungseinheit) kompiliert und verhält sich unter konformen C- und C ++ - Compilern gleich. Ein solches Programm oder eine solche Datei kann zu Recht "ein C / C ++ - Programm" oder "eine C / C ++ - Datei" genannt werden.
Ein Teilprogramm wie eine Header-Datei kann auch in C- und C ++ - Programmen verwendet werden. Solche Header-Dateien können zu Recht als C / C ++ - Header bezeichnet werden.
Zitat von Professor Bjarne Stroustrup:
Also ja, es gibt so etwas wie C / C ++. Es ist alles, was sowohl gültiges C als auch gültiges C ++ ist.
Der C-Pre-Prozessor ist Teil der C-Sprache. Der C ++ - Vorprozessor ist Teil der C ++ - Sprache
Sie können eine Kompilierungseinheit schreiben, die unter C oder C ++ kompiliert wird und unterschiedlich ist . Beispielsweise können grundlegende Funktionen in C kompiliert werden, bei der Kompilierung in C ++ wird jedoch eine C ++ - Bibliothek verwendet.
Wenn das Programm im Wesentlichen dasselbe ist, aber über zusätzliche Funktionen verfügt, ist es nicht gerade falsch zu sagen, dass es dasselbe Programm ist. Es ist das gleiche, aber auch anders.
Die meisten C-Programmierer können zumindest ein bisschen C ++ und umgekehrt
Es ist nicht unvernünftig, eine solche Person als C / C ++ - Programmierer zu bezeichnen. Ja, sie sind wahrscheinlich auf eine Sprache spezialisiert, aber gibt es jemanden, der ein kompetenter C- oder C ++ - Programmierer ist, der buchstäblich keine der anderen Sprachen beherrscht? In gewisser Weise sind sie nicht alle C / C ++ - Programmierer?
Es ist nichts Falsches daran, "C / C ++" zu sagen. Was zählt, wird verstanden
Die englische Sprache ist kein Werkzeug, um Syllogismen auszudrücken . Sie können Englisch für Logik verwenden, aber nur gerade und mit großem Aufwand.
Dies liegt daran, dass Wörter von Natur aus keine exakten Bedeutungen haben, sondern eine vage Wolke von Bezeichnungen und Konnotationen. Was zählt, ist, wenn die Leute verstehen, was Sie sagen.
quelle
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 .
Wenn Sie über etwas in C ++ sprechen, das möglicherweise auch für C zutrifft oder nicht, sagen Sie einfach C ++ .
Wenn Sie auf eine Ähnlichkeit zwischen C und C ++ hinweisen möchten, sagen Sie C und C ++ .
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
ist weder richtig noch falsch.
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.
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.
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.
Wie oben erläutert, ist dies in C ++ 11 geschehen und es wird erwartet / gehofft / benötigt, dass es erneut passiert.
quelle
C / C ++ ist die Schnittstelle zwischen C und C ++.
int new;
ist nicht C / C ++ und ist es auch nichtvector<int> foo;
.In ähnlicher Weise ist C89 / C99 der Schnittpunkt dieser beiden Sprachen, in denen weder eine
enum bool { false, true };
nochfor(int i = 0;;)
eine zulässig ist.Und C ++ 11 / C ++ 14 usw.
Es ist möglich, Code zu schreiben, der unter C ++ 11 und C ++ 14 kompiliert (und korrekt ausgeführt wird), obwohl das Kompilieren unter einem Code nicht impliziert, dass er unter dem anderen kompiliert wird. Tatsächlich machen das viele Leute.
Und viele Leute schreiben Code, der in C und C ++ funktioniert.
Je größer die Überlappung ist, desto sinnvoller ist es. Ich erwarte keine Fragen zu C / C ++ / Java-Code.
Obwohl es "sinnvoll" ist, über eine gemeinsame Teilmenge dieser Sprachen zu sprechen, werden viele Fragen in dieser Teilmenge keine Antworten enthalten, z. B. Was soll main () in C und C ++ zurückgeben?
Sie können jedoch über Code sprechen, der für mehrere Sprachspezifikationen geeignet ist, unabhängig davon, ob diese nach "Version" oder "Sprachenname" oder auf andere Weise unterschieden werden.
quelle
Dies ist eine Art Antwort auf die Position, dass "dies ein Code für Programmierer ist, die in der Nähe des Metalls arbeiten und in einem Managementkontext in Ordnung sind", wie in einigen anderen Antworten und Kommentaren zu sehen ist.
Ich würde argumentieren, dass auch diese Interpretation mit Sorgfalt behandelt werden sollte.
Ab Mitte der 90er Jahre, wenn Sie einen C ++ - Programmierer und jemanden haben wollten, der sich selbst als C-Programmierer bezeichnet, mussten Sie sich fragen, wie viel Sie über objektorientiertes Design wissen und wie viel Erfahrung Sie mit dem Debuggen in einem Objekt haben orientierten Kontext und über ihre Fähigkeit, Vorlagenbibliotheken zu verwenden. Sie möchten genau diese Probleme während des Interview- und Einstellungsprozesses untersuchen.
Auf der anderen Seite ist es nun mehr als ein Jahrzehnt her, dass C ++ - Gurus angefangen haben, "modernes C ++" voranzutreiben, was bedeutet, dass der Schwerpunkt nicht mehr auf nackten Zeigern, sondern auf sichereren Zeigerobjekten und iteratorbasierten Idiomen liegt. Mit dem Erscheinen von C ++ 11 gibt es jetzt eine explizite Unterstützung für die Multi-Paradigma-Programmierung, und der Trend zu Code, der keine nackten Zeiger aufweist, ist sehr stark. Wenn ich heute einen C ++ - Programmierer für eine C-Position interviewen würde, wäre ich sehr besorgt darüber, ob diese Person mit tatsächlichen Zeigern vertraut ist, die das Fußschießen ermöglichen.
Ich bin heutzutage nicht im Geschäft (auch nicht in dem Maße, wie ich es war, als Stack Overflow noch in den Kinderschuhen steckte), daher wage ich keine Vermutung, wie oft ein imaginärer Befragter nicht über die Cross-Over-Fähigkeiten verfügen würde, aber Ich denke, wie am häufigsten angewendet, sind die Sprachen jetzt in der Tat sehr unterschiedlich.
Kurz gesagt, "C / C ++" sollte nicht nur in technischen Kontexten, sondern auch in den meisten geschäftlichen Kontexten fallengelassen werden.
quelle
Die einfachste Antwort auf diese Frage ist, dass Sie diesen Begriff niemals hätten verwenden dürfen. Es ist ein Begriff, der nicht existieren sollte. Es hat keine Bedeutung. Jedes Programm ist entweder C oder C ++.
C ++ 98 und 03 sind mit Classes auch nicht remote C. Wer dir das beigebracht hat, weiß nichts und du kannst sie vergessen. Das war nie richtig.
quelle
Konzeptionell sollte es keine besonderen Schwierigkeiten geben, C-Quelldateien zu entwerfen, damit sie auch so kompiliert werden können, wie sie mit C ++ vorliegen. Dies kann in der Tat einige bedeutende Vorteile haben. Wenn Sie beispielsweise Code für ein eingebettetes System schreiben, ist es manchmal hilfreich, den Code auf einer Host-PC-Umgebung testen zu können. Wenn der Code sauber als C ++ kompiliert wird, kann eine Anweisung wie "MOTOR_ENABLE = 1;" Schreiben in ein flüchtiges E / A-Bit auf dem eingebetteten System (kompiliert als C), aber Auslösen der Emulationslogik auf dem PC (kompiliert als C ++). Es wäre wahrscheinlich auch möglich, einen C ++ - Typ auf dem PC zu entwerfen, der sich so verhält, wie sich ein uint16_t auf kleineren eingebetteten Systemen verhält (so dass
u16 x=65533;
ein Compiler beispielsweise den Wert von berücksichtigen müsstex*x
Obwohl noch keiner meiner Emulatoren dies beinhaltet (zum Teil, weil die C ++ - Compiler, die ich verwendet habe, in solchen Fällen nichts Verrücktes getan haben).Leider haben C-Programmierer und C ++ - Programmierer eine ausreichende Antipathie zueinander, so dass sich die Sprachen im Laufe der Jahre auf kompatible Weise entwickelt haben. Während C89 versucht hat, einige der nützlicheren Funktionen von C ++ (wie Funktionsprototypen) anzupassen, scheint sich eine Einstellung herausgestellt zu haben, dass Programmierer, die eine der Funktionen von C ++ wünschen, C ++ verwenden sollten, wobei die Tatsache ignoriert wird, dass es viele Situationen gibt, in denen dies der Fall ist Es ist hilfreich, einige der Funktionen von C ++ nutzen zu können (z. B. die Möglichkeit, Funktionen mit statischen oder statischen Inline-Verknüpfungen zu überladen, ohne die Kosten für andere Funktionen in Kauf nehmen zu müssen, die nicht benötigt werden (z. B. die mit dem Exportieren verbundene Namensänderung) überladene Funktionen).
Während die Schnittstelle zwischen C89 und C ++ 98 eine funktionsfähige Sprache ist, ist die verwendbare Obermenge späterer Versionen von C mit späteren Versionen von C ++ wahrscheinlich eher geschrumpft als gewachsen (dank der strengen Aliasing-Regel), und Trends sprechen für eine allgegenwärtige zunehmende Fissur.
quelle
namespace
und die letzteren als deklarierenextern "C"
und dann einen C ++ - Compiler verwenden.extern "C"
gibt es auch andere Komplikationen (z. B. Initialisierung statischer Objekte usw.)? Gibt es in C ++ eine Möglichkeit, dies so zu gestalten, dassfoo(1234)
einfoo_const(1234)
Makro aufgerufen wird, währendfoo(x)
[wox
keine Konstante ist] einefoo_var(x)
Funktion aufruft ? Es gibt viele Situationen im eingebetteten Code, in denen es für eine "Funktion" sinnvoll sein kann,SET_PORT(port, state)
drei Formen zu haben, je nachdem, ob Port und Status beide sind ...