PDA

View Full Version : [Frage] CG2&3: C oder C++


\LaTeX
22-02-2004, 15:54
Hallo allesamt..

Mich interessiert, was ihr ueber die Webpage
http://www.fastgraph.com/optimize.html
denkt.. insbesondere in Bezug auf die Wahl der Programmiersprache bei der Spielentwicklung. Ich kann mich naemlich nicht so recht entscheiden, was die sinnvollere Programmiersprache ist: C oder C++.

Was denkt ihr darueber? Gibt es vom Institut Vorgaben, welche Programmiersprache man waehlen muss/sollte?

ciao..

gck
22-02-2004, 16:48
hmm, naja, diese Guidelines sind ja schon 9 Jahre alt, viele Dinge, die drinstehen, sind nicht unbedingt mehr gültig.

zum Beispiel schreibt sie, man soll immer den kleinsten Integertyp verwenden, der von der Breite her praktikabel ist, im Endeffekt rechnen unsere ia32 Prozessoren aber mit 32bit Integers am schnellsten. Oder dass man Fixpunkt-Arithemtik der Gleitpunktarithmetik vorziehen soll, halte ich auch für wenig sinnvoll heutzutage (schaut euch mal die Taktzyklen an, die eine Gleitpunkt Division oder Multiplikation auf einem modernen ia32 Prozessor im Vergleich zum Integer-Äquivalent braucht, außerdem bieten die moderneren ia32 Prozessoren auch Vektoroperationen für Gleitpunktberechnungen an (allerdings die ganz modernen auch für Integeroperationen)).

Viele der Tips zielen auf Verkleinerung der Executable Größe ab, ich weiß nicht, inwiefern das für dich eine Issue ist...

zu C vs. C++: ich persönlich täte wohl C++ verwenden, ganz einfach, weil ich das oo Paradigma für ein Spiel sehr angenehm finden würde, außerdem ist C++ zu C "abwärtskompatibel" d.h. man kann mit ein paar Makros C Code so schreiben, dass er beim Kompilieren mit einem C++ Compiler z.b. in einen eigenen Namespace kommt, und wenn du bereits vorkompilierte C Bibliotheken hast, kannst du die im Normalfall auch sehr leicht mit C++ Code crosslinken... C++ bietet außerdem noch ein paar zusätzliche Sprachmittel an, die man zu schätzen lernen kann, wenn man sich damit auseinandergesetzt hat.

obs vom Institut Vorgaben gibt, weiß ich allerdings nicht...

MaxAuthority
22-02-2004, 16:56
also irgendwie ein interessanter artikel, war mir teilweise nur nicht ganz sicher, ob er erst gemeint oder nicht.

Ob du C oder C++ nimmst, ist im prinzip geschmackssache. Früher wars sicher noch so, dass die paar prozent overhead durch die objektorientierung sich ausgewirkt haben, heute ist das nicht mehr so wichtig (obwohl ich auch bei spielen nur die teile objekt orientiert programmieren würde, wo es wirklcih vorteile hat, und nicht C++ funktionen verwenden würd, weils halt gerade "in" ist OO zu programmieren).

Nette hintergundinformation am rande:
bis quake3 hat john carmack (von id software) immer C programmiert, ab Doom3 ist er auf C++ umgestiegen (ob das der grund ist, warum das spiel so lange braucht, bis es fertig ist ;)

aber nimm einfach die sprache, welche dir besser gefällt, weil grad für die übung sind die 5% performance unterschied vermutlich vernachlässigbar.

ob es vom institut vorgaben gibt, weiß ich leider nicht, ich brauch CG2/3 nicht zu machen.

MichiK
22-02-2004, 18:57
@latex: vergiß den artikel einfach, der ist uralt. Diese Infos beziehen sich auf 386 und 486 CPUs und lassen sich nicht mehr auf heutige Verhältnisse (AMD XP/Intel P4 - Grafikhardware) umlegen. Ich empfehle, für CG23 C++ (unproblematische Entwicklungsumgebung: MS Visual Studio) zu verwenden.
Objekt-Orientierte Programmierung ist da von großen Vorteil.

\LaTeX
23-02-2004, 00:07
Dake erstmal fuer die Antworten..

Ich empfehle, für CG23 C++ (unproblematische Entwicklungsumgebung: MS Visual Studio) zu verwenden.

MS Visual Studio & unproblematisch?.. sagen wir mal nicht fuer jeden ;-).. ich bin eher ein GNU/Linux-Typ, was die Entwicklungsumgebung bzw. Softwareentwicklung anlagt.. Apropos: Habe beim Stoebern bemerkt, dass es so etwas wie eine eigene Art und Weise gibt, wie Windows-Programme aussehen muessen/sollen. Z.B. verwenden viele Leute

int WINAPI WinMain(...)

statt dem "standardisiertem"

int main(...)

Meine Fragen nun: In wie weit beeinfluszt das die Performance der Windows-Applikationen (insbesondere OpenGL-Anwendungen)? Gibt es ueberhaupt Unterschiede? Sollte man solche Abweichungen im Game beruecksichtigen?

Kennt jemand von euch eine brauchbare Webpage/-site zu diesem Thema?

Dank im Voraus..
bye..

MaxAuthority
23-02-2004, 00:26
also ob ich WinMain oder main() verwende hat sicher keinen performance unterschied. das WINAPI vor WinMain() ist nur die calling-convention (d.h. wer räumt den stack auf, der aufrufer oder aufgerufene).

Außerdem grad bei einem spiel haben solche kleinigkeit in der initialisierung keine auswirkung, weil die performance dort im kritischen teil innerhalb deines game-loops kommt. OpenGL hat außerdem standard-funktionen, die auf jeder plattform/jedem compiler gleich sein sollen, glaub nicht dass es daher einen unterschied in der OpenGL performance gibt.

webseite kenn ich auswendig leider auch keine.

ChrisChiu
23-02-2004, 15:33
also irgendwie ein interessanter artikel, war mir teilweise nur nicht ganz sicher, ob er erst gemeint oder nicht.

Ob du C oder C++ nimmst, ist im prinzip geschmackssache. Früher wars sicher noch so, dass die paar prozent overhead durch die objektorientierung sich ausgewirkt haben, heute ist das nicht mehr so wichtig (obwohl ich auch bei spielen nur die teile objekt orientiert programmieren würde, wo es wirklcih vorteile hat, und nicht C++ funktionen verwenden würd, weils halt gerade "in" ist OO zu programmieren).

Nette hintergundinformation am rande:
bis quake3 hat john carmack (von id software) immer C programmiert, ab Doom3 ist er auf C++ umgestiegen (ob das der grund ist, warum das spiel so lange braucht, bis es fertig ist ;)

aber nimm einfach die sprache, welche dir besser gefällt, weil grad für die übung sind die 5% performance unterschied vermutlich vernachlässigbar.

ob es vom institut vorgaben gibt, weiß ich leider nicht, ich brauch CG2/3 nicht zu machen.

WinMain() ist der Standard-Entry-Point für Windows GUI Programme (main() gibt's noch, aber soweit ich weiß ist der in der Windows library fix vorgegeben und ruft eh auch WinMain() auf).

main() verwendest du bei Windows-Programmen meistens, wenn dein Target eine Win32 Konsolenanwendung ist (was du auch bei Verwendung von SDL machen würdest).