Compiler-Empfehlung für C?



  • Hallo zusammen,

    ich studiere Technische Physik und beginnen gerade mit dem C programmieren. Uns wurde der Wotcom Compiler empfohlen.

    Ich habe früher jedoch mal mit "Microsoft Visual C++" C programmiert in meiner Schullaufbahn.

    Mich würds interessieren, welcher Compiler/Software am schönsten geeignet ist mit tollen Debugger etc.

    Was würdet ihr empfehlen?

    Gruß
    C_boy



  • C_Boy schrieb:

    C programmieren. Uns wurde der Wotcom Compiler empfohlen.

    Sowas wie hier? https://de.wikipedia.org/wiki/Watcom
    Habe gerade mal Open Watcom 1.9 (Download von sourceforge.net) installiert. Bedienung der IDE mit separatem Editor u.a. Tools erscheint aufwändig, da ist aber eine Hilfe integriert. Bis die Teile zusammenarbeiten und das erste C-Programm läuft, muß man einige Einstellungen vornehmen und häufiger im Menu "Make" anklicken, damit Änderungen in das Projekt übernommen werden.

    Dann lieber CodeBlocks, da geht vieles wie von selbst. Debugger ist vorhanden, mehr kann ich dazu leider nicht sagen. Empfehlung: CodeBlocks 13.12 mit MinGW/GCC (für C/C++ u. WinAPI), ggf. inkl. Fortran95. Komplett-Setup inkl. MinGW ist ratsam, sonst muß man MinGW bzw. MSYS separat installieren und wissen, welche Teile aus welchem Paket man runterladen muß. Das neuere CodeBlocks 16 hatte ich auch mal, habe es wieder entfernt, weil es Probleme im Editor u.a. gab. LG



  • Es gibt nur 2-3 marktrelevante Kompiler - also in fast allen kommerziellen Projekten genutzte - dein Watcom ist der König (neben Borland) aus (sehr) alten Zeiten

    unter Windows: der CL vom Visual Studio (nutzt einfach die freie Community Edition - https://www.visualstudio.com/de/thank-you-downloading-visual-studio/?sku=Community&rel=15) da ist alles drinn mit Debugger usw.
    Visual Studio ist der Standard unter Windows

    unter Linux: der GCC oder Clang - mit dem Paketmanager deiner Wahl installieren

    unter(für) DOS: Watcom oder Borland

    Codeblocks ist eine IDE - MinGW/GCC ein Windows Port vom GCC



  • Der C-Compiler von Visual Studio unterstützt selbst den vorletzten C-Standard von 1999 noch nicht vollständig (ist aber besser geworden)

    Achte darauf, dass du auch den C-Compiler (und nicht den C++-Compiler) benutzt.
    (am einfachsten, indem du den Quellcode mit .c als Erweiterung abspeicherst)



  • Danke!!

    Also für c++ sind auch alle genannten Programme gut geeignet?

    Zurück zur Entscheidung:
    Es gibt halt auch schon 16.01 Version von Code::Block. Warum gerade dann die 13er Version?

    Naja und ich benutze Windows, also soll ich Visual Studio nehmen? Ist das schlimm, dass die 1999 Version nicht gut funktioniert? bzw. was sind die Konsequenzen?


  • Mod

    Ja, die sind auch alle für C++ geeignet. Teilweise (Visual Studio) sogar primär für C++ mit C bloß angetackert. Da mir die Frage verdächtig vorkommt, eine Warnung: C++ und C sind sehr unterschiedliche Sprachen. Falls du vor hast, C++ über C zu erlernen (oder umgekehrt), ist das ein typischer Holzweg.

    Neuere C-Standards bringen vor allem neue Sprachfeatures. Du kannst auch praktisch alles mit den älteren Standards erreichen, aber mit den neueren geht es teilweise einfacher und einheitlicher. Im Vergleich zu anderen Sprachen, sind die Neuerungen in C aber nicht so wild. C11 sieht auch nicht großartig anders aus als C89. Kannst du eines davon, kannst du auch das andere. (Falls du in Wirklichkeit C++ lernen möchtest (siehe oben): Da gilt das nicht mehr unbedingt. C++ hat 2011 einen neuen Standard erhalten, der durchaus sichtbar verändert hat, wie man seither C++ programmiert. Aber alle bekannten C++-Compiler unterstützen die neuen Standards recht gut)



  • Naja und ich benutze Windows, also soll ich Visual Studio nehmen? Ist das schlimm, dass der die 1999 Version nicht gut funktioniert? bzw. was sind die Konsequenzen?

    nimm für Windows VStudio und für Linux GCC - damit bist du in beiden Welten auf dem Standard

    "normalerweise" ist C99 nicht wirklich relevant - und unter Windows haben 90% der Entwickler (wegen VStudio) keinen vollständigen Support - also fast alles was in C/C++ geschrieben und unter Windows läuft - mit den Windows GCC Ports hast du dann wieder andere Probleme - SEH-Support?

    die Neuerungen von C99
    https://de.wikipedia.org/wiki/Varianten_der_Programmiersprache_C#C99

    sind jetzt keine Showstopper oder Beflügler drinn die dein Programmieren um Lichtjahre bescheunigen/verbessern



  • Danke euch! Nehme dann Vstudio für C und C++.

    SeppJ schrieb:

    Ja, die sind auch alle für C++ geeignet. Teilweise (Visual Studio) sogar primär für C++ mit C bloß angetackert. Da mir die Frage verdächtig vorkommt, eine Warnung: C++ und C sind sehr unterschiedliche Sprachen. Falls du vor hast, C++ über C zu erlernen (oder umgekehrt), ist das ein typischer Holzweg.

    Neuere C-Standards bringen vor allem neue Sprachfeatures. Du kannst auch praktisch alles mit den älteren Standards erreichen, aber mit den neueren geht es teilweise einfacher und einheitlicher. Im Vergleich zu anderen Sprachen, sind die Neuerungen in C aber nicht so wild. C11 sieht auch nicht großartig anders aus als C89. Kannst du eines davon, kannst du auch das andere. (Falls du in Wirklichkeit C++ lernen möchtest (siehe oben): Da gilt das nicht mehr unbedingt. C++ hat 2011 einen neuen Standard erhalten, der durchaus sichtbar verändert hat, wie man seither C++ programmiert. Aber alle bekannten C++-Compiler unterstützen die neuen Standards recht gut)

    Ahh verstehe. Also es ist so: Während dem Physik-Studium wird ein Semester C und ein weiteres Semester C++ gelehrt. Ist wahrscheinlich viel zu wenig, um die Sprachen 100% zu beherrschen nehme ich an für wirkliche Neulinge im dem Gebiet?

    Ich habe vor dem Studium eine technische Schule besucht und habe da auch Maturiert d.h. ich war bei C auf dem Stand bis Verkettete Listen, soweit ich mich noch erinnern kann. Bwz. später dann auch einfache Hardwareprogrammierung mit C. Auch Java wurde 1 Jahr angeschnitten.

    Wie würdest du z.B. empfehlen C++ zu lernen aufgrund obiger Informationen? Eigenstudium mit welchem Buch?





  • Danke für den Link!

    PS: Welche Workloads soll ich da installieren? Desktop development with C++ und Visual Studio extension development?

    Es gibt auch Individuelle Komponentnen zum Auswählen. Aber früher haben wir einfach das VS Studio zum C programmieren von der Schule 1:1 genommen, aber jetzt ist das eine Art Neuanfang. Würd mich freuen, wenn ihr mir sagen könntet, was ich alles brauche :).



  • C_Boy schrieb:

    Es gibt halt auch schon 16.01 Version von Code::Block. Warum gerade dann die 13er Version?

    Wie gesagt: auf meinem NB mit W7-Pro SP1 x64 gab es öfter Probleme mit CodeBlocks 16.01, im Editor war der Cursor eingefroren oder durch Mausbewegung wurde zw. Fenstern von Editor, Projektmanager o.a. gewechselt. Zudem gab es und gibt es auch in CodeBlocks 13.12 ab und zu AppCrash wg. wxWidgets. Ansonsten arbeite ich schon länger mit v.13.12 und bin zufrieden.



  • Hallo C_Boy,

    ja, "Desktop development with C++".

    "Visual Studio extension development" brauchst du nicht, dies wird nur benötigt, wenn du eigene Erweiterungen (Add-Ins) für das Visual Studio selbst entwickeln willst.

    Und wenn trotzdem noch etwas fehlt, dann kannst du ja immer noch nachinstallieren.



  • Danke, ich habs jetzt.

    D.h. wenn ich ein c++ Projekt erstelle, dann muss ich ja auch .cpp-Files hinzufügen. Ich kann aber schon auch in C dann schreiben und nachher das File als .c-Datei speichern?

    Ich habe mal ein kurz Hello World zum Testen geschrieben:

    #include<stdio.h>
    
    int main(void) {
    	printf("Hello World\n");
    	return 0;
    }
    

    Jedoch wird die CMD mit dem Output nicht geöffnet, da er die Threads immer vorher schließt scheint mir:

    'Project1.exe' (Win32): Loaded 'C:\Users\...... ;) \Documents\Visual Studio 2017\Projects\Project1\x64\Debug\Project1.exe'. Symbols loaded.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\apphelp.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140d.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbased.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\kernel.appcore.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'. Cannot find or open the PDB file.
    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\rpcrt4.dll'. Cannot find or open the PDB file.
    The thread 0x1878 has exited with code 0 (0x0).
    The thread 0x333c has exited with code 0 (0x0).
    The thread 0xf08 has exited with code 0 (0x0).
    The program '[3992] Project1.exe' has exited with code 0 (0x0).
    

    Hab ich etwas vergessen zum Installieren?

    Auch die c++-Version funktioniert nicht(selber Output vom Debugger wie oben):

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Hello World" << endl;
    }
    


  • Kein Fehler 😉
    Das liegt nur daran, daß das Programm innerhalb der Konsole startet, durchläuft und sich dann die Konsole automatisch wieder schließt. Starte einfach mal mit "Strg+F5", dann bleibt die Konsole offen.

    Oder wenn du debuggen möchtest, dann setze einfach einen Haltepunkt (breakpoint) auf die letzte Zeile.



  • Alles in Ordnung - 100% korrektes Verhalten - nicht jede Meldung die für dich unverständlich ist deutete auf einen Fehler hin

    und wenn du nichts in dein Programm einbaust das auf einen Tastedruck wartet - wartet auch niemand auf einen Tastendruck

    mach einfach mal mit F9 auf dein return 0 am Ende der main einen Breakpoint und starte mit F5 - wichtig sind noch F10 und F11 als Tasten

    'Project1.exe' (Win32): Loaded 'C:\Users\...... 😉 \Documents\Visual Studio 2017\Projects\Project1\x64\Debug\Project1.exe'. Symbols loaded.

    für dein eigenens Programm gibt es Debug-Information - ist ja auch dein Code

    'Project1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.

    ein paar Sachen die dein Programm zum laufen braucht bringt keine Debug-Infos mit - normalerweise auch nicht nötig (und kann man z.B. zusätzlich installieren)

    The program '[3992] Project1.exe' has exited with code 0 (0x0).

    = alles Super



  • Ahh, danke. Aber leider öffnet sich das CMD-Fenster mit STRG+F5 auch nicht.

    Wenn ich jedoch einen Breakpoint beim printf setze und debugge, dann öffnet sich das CMD-Fenster und es wird auch der output erzeugt. Aber warum funktioniert STRG+F5 nicht? Man sieht das Command-Fenster sogar ganz kurz, aber es schließt sich sofort wieder.

    edit: habe den Beitrag von Gast3 erst jetzt gelesen: Ja, das mit dem Breakpoint funktioniert. Muss ich also immer einen Breakpoint setzen, um das Programm zum laufen zu bringen bezüglich Outputs in das CMD-Fenster?
    Denn ich kann mich erinnern, dass dies beim VS c++ 2011 einfach mit STRG+F5 ging, ohne einen Breakpoint zu setzen und ohne sich durch zu debuggen.



  • Du kannst auch eine extra Konsolo öffnen (CMD.exe) und dann mit cd zu deinem Programmordner navigieren.

    Dort kannst du das Progrmm dann aufrufen.
    Du siehst alle Ausgaben und die Konsole schließt sich nicht.



  • Ok, danke. Durch googeln habe ich jedoch auch eine andere Möglichkeit gefunden: http://stackoverflow.com/questions/1775865/preventing-console-window-from-closing-on-visual-studio-c-c-console-applicatio#1775870

    Habe folgendes gemacht:

    Right click on your project

    Properties>Configuration Properties> Linker> System
    

    select Console (/SUBSYSTEM:CONSOLE) in SubSystem option.

    Und es funktioniert. Muss ich das also bei jedem neuem Projekt immer einstellen, sodass das immer funktioniert oder gibts da irgendwo auch globale Settings bezüglich dieser Einstellung?



  • So funzt es auch:
    [code="c"]
    #include<stdio.h>

    int main(void) {
    printf("Hello World\n");
    getchar();
    return 0;
    }
    Dann schließt sich die Konsole bei einem beliebigen Tastendruck.



  • ralros schrieb:

    So funzt es auch:
    [code="c"]
    getchar();
    }
    Dann schließt sich die Konsole bei einem beliebigen Tastendruck.

    Das kann aber auch noch die zurückgetellte Entertaste von einem vorhergehenden scanf sein.

    Oder es soll in einem Batch ablaufen. Dann stört das auch.

    Daher ist das nicht zu empfehlen.


Log in to reply