Ich bin mir nicht sicher, was Programmierung in C wirklich bedeutet: - Programmierung in reinem C mit einem C-Compiler oder - Programmierung in C mit einem C ++ - Compiler.
Abgesehen von den Unterschieden zwischen der C-Syntax von C und der C-Syntax von C ++, kann ich sicher sagen, dass es absolut (oder in sehr wenigen Fällen) keine Unterschiede zwischen zwei ausführbaren Dateien in Bezug auf die Leistung gibt?
Ich denke über dieses Problem nach, weil bei der Programmierung von Spielen jeder Teil des Renderings, der Teil des Spielobjekts und der Teil des Spieleskriptings komplett verschiedene Sprachen programmiert werden können, um den besten Kompromiss zwischen Ausführungsgeschwindigkeit und einfacher Entwicklung zu erzielen und das bei jedem dieser Teile.
Diese Trennung zwischen Teilen kann für mich wichtig sein. Ich möchte zum Beispiel eine vielseitige 3D-Abenteuer-Engine entwickeln, in der eine Community ihr eigenes Gameplay erstellen kann, ohne sich mit der Engine herumschlagen zu müssen. Es wäre nur in der Lage, Spiele mit einem einzelnen Charakter und mehreren Enemies zu machen, so dass unterschiedliche Spieltypen abgedeckt würden: hack & amp; Schrägstrich, Infiltration, RPG, Plattform, etc.
Ich hätte diese 2 Absätze in gamedev.stackexchange setzen sollen, aber der erste Teil betrifft nur die Sprachen ...
Es gibt viele kleine Nitpicks. Eine, die mir am offensichtlichsten erscheint, ist, dass Sie in C ++ den Rückgabewert von malloc
umsetzen müssen. Auch Strukturen werden automatisch in C ++ typedefed.
Verwenden Sie immer einen C-Compiler für C-Code, nicht C ++. C ++ ist nicht perfekt kompatibel mit C.
Ein paar andere:
void func();
eine Funktion, die nicht angegeben hat, was ihre Argumente sind, während in C ++ void func();
dem C void func(void)'
entspricht und keine Argumente annimmt; 'a'
) ist int
in C und char
in C ++; char []
in C und const char []
in C ++; class
, sind reservierte Schlüsselwörter in C ++. Für all diejenigen, die mir nicht glauben und die Sie ablehnen, schauen Sie sich diesen C-Code an:
%Vor% Die Kompilierung unter gcc
ist in Ordnung, aber die Kompilierung unter g++
führt zu folgenden Fehlern:
Hinweis: Die Unterschiede zwischen C- und C ++ - Syntax sind bereits in anderen Beiträgen beschrieben ... Dennoch hat mich etwas gestört, um folgende Antwort zu geben:
Wenn ich richtig verstanden habe, möchten Sie zwei separate Teile in einem Programm haben, eins in C und eins in C ++. Einer sollte eigentlich sehr schnell sein und der andere könnte langsamer sein.
Im aktuellen Fall (Vergleich der C- und C ++ - Performance) wird es keinen sichtbaren Unterschied geben, wenn der gleiche C-Code mit einem C- und C ++ - Compiler kompiliert wird ...
Natürlich unterschätzen Sie niemals, wie wichtig die Fähigkeiten des Programmierers für die Leistung eines Programms sind, unabhängig von der Sprache.
void *
). void *
, etc.). Fakt ist, dass die "kleinen Details" oben als gefährlich angesehen werden, weshalb sie Fehler oder Warnungen auf einem C ++ - Compiler erzeugen. extern "c"
-Spezifizierer verwenden. void *
aus casten (beachten Sie, dass dies nicht oft oder gar nicht in C ++ vorkommen sollte, also ist dies ein vernachlässigbares Problem im Vergleich zu potenziellen Casting-Fehlern). Mit C / C ++ meine ich Code, der von C- und C ++ - Compilern korrekt verstanden wird. Während Ihre Sprache der Wahl variieren könnte, werden diese kompatiblen C / C ++ - Header identisch sein (auch wenn Sie in C ++ programmieren und zusätzliche C ++ - Header für C ++ - Benutzer Ihres Codes bereitstellen)
extern "C"
-Spezifizierer, umhüllt mit #ifdef __cpluplus
. Dies stellt sicher, dass ein C ++ - Compiler weiß, dass diese Funktionen als C-Funktionen namespace
oder class
oder template
ist eine schlechte Idee) extern "C"
-Spezifizierer, umhüllt mit #ifdef __cpluplus
. Dies stellt sicher, dass ein C ++ - Compiler weiß, dass diese Funktionen als C-Funktionen Ich fand die folgende Seite ziemlich interessant, da sie die Unterschiede zwischen C (einschließlich C99) und C ++ auflistet:
Wie für C99 Funktionen fehlen in C ++, können Sie meine Antworten Sie auf die Frage Was kann in c getan werden, aber nicht in C ++? : Ich beschreibe C ++ - Funktionen, die diese C99-Features leicht ersetzen.
Wie auch immer, wenn C ++ schnell und robust genug für F-35 , dann sollte es für dich genug sein.
Ein großer Teil der Software des F-35 ist in C und C ++ geschrieben, weil Programmierer frei sind; Ada83-Code wird auch von der F-22 wiederverwendet.
Quelle: Wikipedia: Ссылка
Also, wenn Sie wählen müssen, dann wählen Sie Ihre Sprache, weil Sie es mögen, oder weil man als etwas, was das andere nicht hat. Aber nicht wegen angeblicher Leistungsunterschiede.
Ich denke, dass es einen kleinen Unterschied geben kann, aber oft ist der Algorithmus in Programmen der Ort, an dem Sie sich am meisten anstrengen sollten. Ob Sie nun C oder C ++ verwenden, spielt unter dem Gesichtspunkt der Leistung keine Rolle. C ++ ermöglicht es Ihnen, Ihr Modell einfacher (*) zu abstrahieren und ein benutzerfreundlicheres Framework zu erstellen. Selbst wenn es einen Unterschied gäbe, würde ich mir darüber nicht allzu viele Gedanken machen.
(*), d. h. besser von der Sprache selbst unterstützt.
Mischen Sie niemals diese zwei Sprachen, sie sind sehr unterschiedlich. Selbst bei der Programmierung in "C" -Stil können Sie versehentlich große Fehler machen, indem Sie C ++ - Konstrukte verwenden.
Für C-Software verwenden Sie einen guten C-Compiler, der C99 wie gcc oder Intel unterstützt. Verwenden Sie für C ++ einen guten C ++ - Compiler, der die Aufgabe erfüllt. Das Mischen würde zu einem schlechten und gefährlichen Code führen.
Beispiel?
Sie sehen, dass der Code in der Datei ".cpp" ist und beginnen Sie mit einer einfachen Sache wie std::vector
, die Ausnahmen auslöst (zum Beispiel std::vector::at
... Ausnahmen in C-Code wäre ein Desaster.