Wahl des Compilers



  • Ich find JanJan's Antwort schlecht.

    Kommt drauf an was du willst und womit du arbeitest. Wenn du sowieso das Visual Studio als IDE verwenden willst und nur Micrsoft verwendest, dann ja, nimm den MS Compiler.
    In jedem anderen Fall: verwende den GCC. Den gibts fuer jedes OS. Und vermutlich hast bei den Microcontrollern auch mit dem gearbeitet. Vorteil: du musst nur einen Compiler kennen lernen (toolchain, Optionen, Moeglichkeiten, Quirks, ...) statt einen pro Plattform, er wird oefter aktualisiert (MS Compiler gibts grad mal 1x alle 2,3 Jahre ein Update) und unterstuetzt mehr vom aktuellen C++0x Standard.

    Den Borland Compiler solltest du sowieso auf keinen Fall anfassen (sehr alt).



  • Der Compiler von Microsoft produziert für Windows deutlich besseren Code als der GCC.

    C++0x ist kein aktueller Standard, er ist noch gar kein Standard.



  • Ich finde Blue-Tigers Antwort eher schlecht 😉

    Und den gcc für Windows auch. Die Fehlermeldungen sind miserabel, der Linker braucht ewig und die entstehenden ausführbaren Dateien sind unnötig groß.
    Im Vergleich ist der MS-Compiler mindestens doppelt so schnell (selbst wenn der gcc auf Kompiliergeschwindigkeit optimiert und der MS-Compiler auf Programmgeschwindigkeit) und die ausführbaren Dateien sind höchstens halb so groß (selbst wenn der gcc auf Platz optimiert und der MS-Compiler garnicht). Es gibt auch andere Effekte: Wenn ich mit dem gcc auf WinXP kompiliere, dann läuft die exe nicht auf Win7, mit dem MS-Compiler schon.

    Bei den Updates für den gcc muss ich auch massiv widersprechen. Der aktuelle gcc für Windows ist Version 3.4.5, der wurde 2006 veröffentlicht. Seitdem gibt es nur "release Candidates" die häufig nicht richtig funktionieren (bei mir stürzt gdb sofort nach dem Start ab, gcc 4.4). Und die 3.4.5-Version erlaubt Variablendefinitionen im switch/case, wer weiß was da für Code draus wird.

    Meiner Meinung nach wird der gcc für Windows von den Entwicklern sehr stiefmütterlich behandelt und hat einfach nicht die Windows-Kompetenz, die ein Microsoft- oder Intelcompiler haben.

    Zu guter Letzt gibt es mit dem MS-Compiler eine IDE die mit "nur" 60MB RAM läuft, und im Gegensatz zu Eclipse in annehmbarer Zeit startet. Mit etwas Glück kopierst du deine Dateien in Visual Studio, drückst F5 und es läuft, anstatt stundenlang an Makefiles rumzuhacken.

    Fazit: Lass die Finger vom gcc unter Windows. Ich habe mich jahrelang damit rumgeschlagen, es funktioniert nicht gut.



  • Hmm ich war mit dem gcc für Windows eigentlich immer recht zufrieden. Gibt es den Windows-Compiler eigentlich auch ohne IDE?



  • player4245 schrieb:

    Hmm ich war mit dem gcc für Windows eigentlich immer recht zufrieden. Gibt es den Windows-Compiler eigentlich auch ohne IDE?

    Jain. Soweit ich weiß gibt es ihn nicht allein, allerdings muss man die IDE ja nicht benutzen. Die Konsolenbefehle sind alle etwas anders, aber sobald man die herausgefunden hat kann man den wie den gcc benutzen. Allerdings hilft auch hier die IDE: Man kann sich die Compileroptionen zusammenklicken, mit Erklärung was sie tun und was womit nicht kompatibel ist. Am Ende kann man sich einfach den gesamten Compilerflagstring aus der IDE kopieren und in einem Makefile benutzen.



  • Es gibt keinen GCC für Windows. Es gibt Portierungen, wie zB Cygwin oder MinGW. Und es gibt einen 4.4er GCC für MinGW http://www.tdragon.net/recentgcc/

    @Janjan
    Apple nutzt auch einen GCC und mittlerweile clang (der kann aber noch kaum C++)



  • @nwp2:
    Dass ein 4-jahre alter GCC ziemlich schlecht abschneidet ist klar 😉

    Dass der GCC unter Windows etwas stiefmuetterlich behandelt wird, stimmt allerdings leider. Die Release-Candidates bzw. Releases von TDM funktionieren meiner Erfahrung nach trotzdem einwandfrei (bis 4.2, neuere Versionen hab ich nie probiert). Die Inkompatibilitaeten mit Win7 kannte ich allerdings nicht.

    Ad IDE: du musst ja nicht Eclipse verwenden. Es gibt (GCC)IDEs, die wesentlich weniger RAM benoetigen als das Visual Studio 😉



  • Microsoft Compiler wird auch in Windows SDK mitgeliefert.



  • Blue-Tiger schrieb:

    @nwp2:
    Dass ein 4-jahre alter GCC ziemlich schlecht abschneidet ist klar 😉

    Hmm, so klar ist das nicht. Alte Compiler haben weniger optimiert, daher sind sie schneller. Außerdem legt alte Software viel mehr Wert auf Geschwindigkeit, auf einem 100MHz-Rechner kann man sich halt nicht so viel leisten wie auf einem 3GHz-Rechner.

    Aber der Vergleich bezog sich eh auf den gcc 4.4.

    Clang ist ziemlich nett, der kann hilfreiche bunte Fehlermeldungen machen und ist gcc-kompatibel (soviel wie sie schon implementiert haben) und kann viele weitere Tricks wie Syntax- und vielleicht auch Semantikhighlighting. Ich habe aber leider immernoch keine Clang-kompatiblen Header für Windows gefunden, sonst würde ich wahrscheinlich den benutzen. Übrigens war Clang der Grund warum ich überhaupt Visual Studio installiert habe, sonst würde ich immernoch 10 Sekunden statt 3 aufs Neukompilieren warten (ein gigantischer Unterschied :D).

    Edit:

    Zeus schrieb:

    Microsoft Compiler wird auch in Windows SDK mitgeliefert.

    Wobei man erwähnen sollte dass das WinSDK auch seine stolzen 188MB hat. Aber immernoch besser als die 423MB von Visual Studio (bezieht sich auf meine Installationen).



  • nwp2 schrieb:

    Die Fehlermeldungen sind miserabel, der Linker braucht ewig und die entstehenden ausführbaren Dateien sind unnötig groß.
    Im Vergleich ist der MS-Compiler mindestens doppelt so schnell (selbst wenn der gcc auf Kompiliergeschwindigkeit optimiert und der MS-Compiler auf Programmgeschwindigkeit) und die ausführbaren Dateien sind höchstens halb so groß (selbst wenn der gcc auf Platz optimiert und der MS-Compiler garnicht)

    Man muss aber auch bedenken, dass die VC++-Executables eine VC++-Runtime auf dem Zielrechner benötigen, wenn man die statisch linkt, ist das Programm doch auch einige KB größer?



  • Der GCC hat unter Windows hauptsächlich ein Problem: Es scheint ihn nicht zu geben. Zumindest nicht in der Form wie auf anderen Betriebssystemen. Man hat die Wahl zwischen einigen schlechten Ports und zugehörigen Hacks. Support für normalsterbliche gibt es auch nicht wirklich. Wo finde ich z.B. einen GCC-Port für Windows x64, den ich wirklich einfach installieren und benutzen kann? Und wie war das nochmals; unterstützt MinGW nach Jahren nun endlich wchar_t und die Libraries mit wcout etc.?

    Was ich sagen will: Für sehr fortgeschrittene Programmierer, welche mit diversen Platformen arbeiten wollen bzw. müssen, ist das Aufsetzen des GCC unter Windows eine Variante, welche unter gewissen Umständen in Frage kommen könnte. Für alle anderen ist es komplett unvernünftig, den Compiler überhaupt nur zu suchen. Mit Code::Blocks zusammen ausgeliefert ist wohl das Maximum, welches man rausholen kann. Und das ist schade, denn auch wenn Microsoft mit Visual C++ seit 2003 verdammt gute Arbeit geleistet hat, wäre ein wenig Konkurrenz ganz gut 😉



  • /rant/ schrieb:

    Der GCC hat unter Windows hauptsächlich ein Problem: Es scheint ihn nicht zu geben. Zumindest nicht in der Form wie auf anderen Betriebssystemen. Man hat die Wahl zwischen einigen schlechten Ports und zugehörigen Hacks. Support für normalsterbliche gibt es auch nicht wirklich. Wo finde ich z.B. einen GCC-Port für Windows x64, den ich wirklich einfach installieren und benutzen kann? Und wie war das nochmals; unterstützt MinGW nach Jahren nun endlich wchar_t und die Libraries mit wcout etc.?

    Wie gesagt, GCC-4.4.x-Versionen wie der TDM MinGW unterstützen diese Libs.



  • In Tests habe ich festgestellt, das VC++ auch bei statisch gelinkter Standardlib kleinere Executables produziert (fast 50 % kleiner).



  • Mr X schrieb:

    In Tests habe ich festgestellt, das VC++ auch bei statisch gelinkter Standardlib kleinere Executables produziert (fast 50 % kleiner).

    Gut möglich, vor allem der MinGW-TDM-GCC 4.4.1 produziert, wenn man <iostream> einbindet, selbst mit allen Optimierungen 450 KB großen Code 😞 .
    Vielleicht bringt ja die LTO vom neu erschienenen GCC 4.5 was.
    EDIT: Link-Time-Optimisation gibt's nur für ELF-Targets, dazu zählt Windows nicht.



  • wxSkip schrieb:

    Mr X schrieb:

    In Tests habe ich festgestellt, das VC++ auch bei statisch gelinkter Standardlib kleinere Executables produziert (fast 50 % kleiner).

    Gut möglich, vor allem der MinGW-TDM-GCC 4.4.1 produziert, wenn man <iostream> einbindet, selbst mit allen Optimierungen 450 KB großen Code 😞 .
    Vielleicht bringt ja die LTO vom neu erschienenen GCC 4.5 was.

    Lässt sich die exe auch nicht "strippen" (mit strip)?



  • Ist schon gestrippt.
    Das einzige, was ich noch probieren könnte, ist -Os.

    EDIT: Bringt auch nichts, immer 457 KB groß.



  • wxSkip schrieb:

    /rant/ schrieb:

    Der GCC hat unter Windows hauptsächlich ein Problem: Es scheint ihn nicht zu geben. Zumindest nicht in der Form wie auf anderen Betriebssystemen. Man hat die Wahl zwischen einigen schlechten Ports und zugehörigen Hacks. Support für normalsterbliche gibt es auch nicht wirklich. Wo finde ich z.B. einen GCC-Port für Windows x64, den ich wirklich einfach installieren und benutzen kann? Und wie war das nochmals; unterstützt MinGW nach Jahren nun endlich wchar_t und die Libraries mit wcout etc.?

    Wie gesagt, GCC-4.4.x-Versionen wie der TDM MinGW unterstützen diese Libs.

    x64? 😃 😉

    TDM-GCC is now heartily endorsed for production use in any non-critical environment. No level of support for TDM-GCC is in any way guaranteed.

    Ich wünsch mir einen GCC auf Linux Niveau. Am besten so einfach einzurichten und sicher zu benutzen wie etwa unter Ubuntu 😞



  • /rant/ schrieb:

    Ich wünsch mir einen GCC auf Linux Niveau. Am besten so einfach einzurichten und sicher zu benutzen wie etwa unter Ubuntu 😞

    Mit dem Einrichten gibts doch aber eigentlich keine Probleme, oder?



  • verwendet hier niemand den intel c compiler 😕
    soll doch für x86 eine tolle performance liefern 🙂

    lg lolo



  • Ist aber auch nicht frei erhältlich (außer für nicht-komerzielle Linux Projekte). 😉


Anmelden zum Antworten