Compiler-Empfehlung für C?



  • 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.



  • Weiß jemand, was SUBSYSTEM.CONSOLE ist und warum STRG+F5 das CMD-Fenster nicht standardmäßig offen hält?



  • C_Boy schrieb:

    Weiß jemand, was SUBSYSTEM.CONSOLE ist und warum STRG+F5 das CMD-Fenster nicht standardmäßig offen hält?

    Wir sind nicht dazu da, dir deinen Hintern hinterherzutragen. Je eher du lernst, Sachen selbstständig in Erfahrung zu bringen, desto eher tust du dir selbst und uns jedes Mal einen Gefallen, wenn du eine Frage stellst, die nicht mit < 5 Minuten Googlen zu beantworten ist. Ansonsten wartest du jedes Mal auf eine Antwort, und Leute denken, dass du versuchst, deine Probleme zu ihren zu machen.


Anmelden zum Antworten