none
C++ und C

    Frage

  • Ich habe da eine Frage theoretischer Natur. Und zwar hab ich mich gefragt, ob ein C++ Compiler irgendwas besser kann als ein C Compiler. Heisst also, wenn ich jetzt alles von C++ nach C übersetzen würde (das kann mühsam sein, weil nicht alle Features unterstützt werden und so, aber das meine ich nicht)... und dann würde ich es kompilieren. Hätte dann der C Compiler einen Nachteil, weil er zum Beispiel gewisse Funktionsaufrufe nicht so schlau optimieren kann wie C++ aufgrund fehlender Informationen oder gibt's da keine Nachteile? ... ich sehe nämlich im Moment keine ...

    Rudolf

    Samstag, 24. August 2013 14:02

Antworten

Alle Antworten

  • Eigentlich nicht. C++ Quellcodes werden in Maschinensprache übersetzt. Für jede Maschinensprachen-Sequenz findet man auch entsprechende C-Konstrukte, die jene erzeugen.


    "Beim Programmieren selbst regiert der Rotstift!..."

    Samstag, 24. August 2013 15:00
  • Also,

    C++ ist erstmal eine Objektorientierte Programmiersprache und C nicht. Per Definition ist C ein Subset von C++ (wenn nach ansi standart).

    Also C=>C++ kein Problem....

    Von C++=> C Problematisch da halt C keine Objekte mit den ganzen vorteilen wie polymorphie kennt. Aber du kannst alles was du in C++ machst auch in C schreiben, ist halt nur aufwendiger und unübersichtlicher...

    Sonntag, 25. August 2013 00:59
  • Ja, ich kenn die Sprachen ziemlich gut. Nur bin ich mir nicht sicher, ob ich ein Feature übersehe von C++, was ihm gegenüber dem C einen Vorteil verschaffen kann. Z.B. kennen beide "inline" ... aber z.B. __fastcall ? Also, gibt es möglicherweise für den C++ Compiler die Möglichkeit Parameter per Register zu übergeben bzw. keinen eigenen Stack für die aufgerufene Funktion aufzubauen in einer Situation wo das der C Compiler nicht tun dürfte?? ... mir geht's mehr um so etwas. Aber mir fällt dazu gerade nichts ein... vielleicht wüsstet ihr ja was, dachte ich. Obwohl, ich könnte mir schon vorstellen, dass es gar nichts gibt...
    Sonntag, 25. August 2013 18:55
  • Ich bin sicher, dass die Optimierung nach der ersten Compiler-Phase für C++ und C vollkommen identisch abläuft.

    Die Optimierungen wie Loop-Unrolling und ws nicht noch alles sind IMHO für beide Compiler identisch.

    Und eigentlich ist C++ hier wirklich nichts anderes als C. Es wird eben als erstes Argument immer nur ein this Zeiger zusätzlich übergeben. Vermutlich unterscheiden sich die Compiler (außer durch die Sprachdefinition) gar nicht.

    Der eigentliche Vorteil von C++ liegt in der Sprache selbst und nicht in dem Code, der daraus erzeugt wird.

    BTW: Auch der C Compiler versteht __fastcall!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Montag, 26. August 2013 06:14
  • Ha! doch noch was gefunden... "pointer alias optimization" ... kann man in C nicht machen (ausser wenn deklariert mit dem restricted Schlüsselwort, das gibt's aber noch nicht so lange) ... in C++ kann der Compiler das aber zum Teil tun, weil er in gewissen Situationen gewisse Schlüsse ziehen kann, die es ihm erlauben, etwas zu optimieren.

    ... gut... aber, das ist ja wie gesagt seit C99 auch hinfällig.

    Montag, 26. August 2013 13:51
  • Wo man grade so beim Optimierungs-Plausch ist: Wie transparent sind Funktionen eigentlich für den compiler? Ich kann mich noch erinnern, dass es früher hieß, nur Funktionen, die schon im Header implementiert sind, wären inline-fähig und könnten deswegen im jeweiligem Kontext optimiert werden. Das ändert sich mit den whole-program-optimizations nehme ich an. Da stellt sich mir dann aber doch die Frage: Wo hört solche transparenz der Funktionen auf? Können solche Optimierungen nur bei vorliegendem Quelltext vorgenommen werden oder kann der Compiler eine Funktion in Binärcode "verstehen" und eine im Kontext optimierte Fassung generieren (zum Beispiel, wenn man statisch mit einer .lib linkt)?

    Extended Free Inclusion License ... applies to any functional item or part thereof as received under the EFIL. ... You can redistribute such item(s) under the terms of the EFIL. ... You can include such item(s) for use in bigger item(s) outside the scope of the EFIL: The EFIL will try to protect the rights as executed under it. ... your ability to freely recombine such item(s) as received from the EFIL. The EFIL makes no claim of the item(s) received to be any GOOD: There is no warranty...

    Montag, 26. August 2013 15:20
  • Whole program optimization funktioniert nur weil eine Meta-Sprache erzeugt wird und das ganze Programm im Linker kompiliert wird.

    Da zu dieser Zeit das gesamte Programm im "Blickfeld" des Compilers ist und nicht nur ein Modul, ist die Optimierung selbstverständlich weitergehend...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Dienstag, 27. August 2013 06:39
  • ... also wenn es hier nichts mehr zu sagen gibt, dann werden wir uns wohl für C als unsere Ziel-Sprache für Cross-, Zwischen- und Hilfs-Compiler entscheiden.

    Danke, hat mir sehr geholfen...

    Rudolf

    Donnerstag, 29. August 2013 18:19