Code::Blocks ... nichts fuer Anfaenger ?!



  • Erhard Henkes schrieb:

    Ich fasse mal als "Synthese" zusammen:

    ...
    

    Dem kann ich zustimmen. Die komplizierten oder plattformabhängigen Teile sind in Funktionen versteckt und der Rest entspricht dem, was man in Büchern oder Tutorials so am Anfang lernt. Für kompliziertere Spielereien mit der Konsole würde ich dann aber wie schon erwähnt die Improved Console von SideWinder empfehlen. Man muss das Rad ja nicht neu erfinden.

    Als Verbesserung würde ich noch vorschlagen textcolor den Wert 15 als Defaultparameter mitzugeben. Dann kann man den const int farblos auch weglassen.





  • Als Verbesserung würde ich noch vorschlagen textcolor den Wert 15 als Defaultparameter mitzugeben. Dann kann man den const int farblos auch weglassen.

    Gute Idee, weg mit Ballast. Ich wollte mit dem "farblos" nur etwas provozieren. 😃

    #include <windows.h> //Warning: no C++ standard!
    #include <iostream>
    #include <limits>
    
    void wait()
    {
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      std::cin.get();
    }
    
    void textcolor(unsigned short color=15)
    {
        SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color);
    }
    
    int main()
    {
      for (int i=1; i<15; ++i)
      {
          textcolor(i);
          std::cout << "Hello World!" << std::endl;
      }
    
      textcolor();
      std::cout << "\nColorless C++ ISO Standard:" << std::endl;
      std::cout << "hello, world" << std::endl;
    
      wait();
    }
    


  • Obiges Programm macht dem MSVC++ 2008 Probleme, weil das Makro max(a,b) aus windows.h in Konflikt gerät mit der Funktion ...::max()

    warning C4003: Nicht genügend übergebene Parameter für das Makro 'max'
    error C2589: '(': Ungültiges Token auf der rechten Seite von '::'
    usw.

    Wie kann man das umgehen, ohne windows.h auszublenden?

    Ansonsten müsste man in Zusammenhang mit windows.h doch wieder die alte Version verwenden, am besten gleich getch().


  • Administrator

    Wie wäre es damit:

    #include <windows.h>
    #undef max
    
    // ...
    

    Und noch eine Frage, wieso das wait so kompliziert?

    void wait()
    {
        std::cin.clear();
        std::cin.sync();
        std::cin.get();
    }
    

    Die Methode sync() sollte absolut ausreichen:
    http://www.cplusplus.com/reference/iostream/istream/sync.html

    Grüssli



  • ..



  • ich finde es äußerst nervtötend, wenn jedes konsolenprogramm gegen ende noch einen druck auf enter benötigt, um zu beenden. deshalb würde ich anfängern so etwas auch nie empfehlen. besser den umgang mit der konsole gleich lernen.



  • Zum Minmax-Problem (aus windows.h):

    /*  If defined, the following flags inhibit definition
     *     of the indicated items.
     *
     *  NOGDICAPMASKS     - CC_*, LC_*, PC_*, CP_*, TC_*, RC_
     *  NOVIRTUALKEYCODES - VK_*
     *  NOWINMESSAGES     - WM_*, EM_*, LB_*, CB_*
     *  NOWINSTYLES       - WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*
     *  NOSYSMETRICS      - SM_*
     *  NOMENUS           - MF_*
     *  NOICONS           - IDI_*
     *  NOKEYSTATES       - MK_*
     *  NOSYSCOMMANDS     - SC_*
     *  NORASTEROPS       - Binary and Tertiary raster ops
     *  NOSHOWWINDOW      - SW_*
     *  OEMRESOURCE       - OEM Resource values
     *  NOATOM            - Atom Manager routines
     *  NOCLIPBOARD       - Clipboard routines
     *  NOCOLOR           - Screen colors
     *  NOCTLMGR          - Control and Dialog routines
     *  NODRAWTEXT        - DrawText() and DT_*
     *  NOGDI             - All GDI defines and routines
     *  NOKERNEL          - All KERNEL defines and routines
     *  NOUSER            - All USER defines and routines
     *  NONLS             - All NLS defines and routines
     *  NOMB              - MB_* and MessageBox()
     *  NOMEMMGR          - GMEM_*, LMEM_*, GHND, LHND, associated routines
     *  NOMETAFILE        - typedef METAFILEPICT
     *  NOMINMAX          - Macros min(a,b) and max(a,b)
     *  NOMSG             - typedef MSG and associated routines
     *  NOOPENFILE        - OpenFile(), OemToAnsi, AnsiToOem, and OF_*
     *  NOSCROLL          - SB_* and scrolling routines
     *  NOSERVICE         - All Service Controller routines, SERVICE_ equates, etc.
     *  NOSOUND           - Sound driver routines
     *  NOTEXTMETRIC      - typedef TEXTMETRIC and associated routines
     *  NOWH              - SetWindowsHook and WH_*
     *  NOWINOFFSETS      - GWL_*, GCL_*, associated routines
     *  NOCOMM            - COMM driver routines
     *  NOKANJI           - Kanji support stuff.
     *  NOHELP            - Help engine interface.
     *  NOPROFILER        - Profiler interface.
     *  NODEFERWINDOWPOS  - DeferWindowPos routines
     *  NOMCX             - Modem Configuration Extensions
     */
    

    Also vor dem Include oder Projektweit NOMINMAX definieren.



  • Thx, das habe ich noch nie gesehen. 😉



  • Hallo,

    queer_boy schrieb:

    ich finde es äußerst nervtötend, wenn jedes konsolenprogramm gegen ende noch einen druck auf enter benötigt, um zu beenden. deshalb würde ich anfängern so etwas auch nie empfehlen. besser den umgang mit der konsole gleich lernen.

    Dem kann ich nur zustimmen. Immer, wenn ich eine solche Frage bezogen auf das typische "Warum schliesst sich das Programm sofort-Problem" beantworte, füge ich immer zusätzlich an, dass es sich um "Konsolen"-Programme handelt, die nicht umsonst diesen Namen haben, und man doch auf eine "Warten-Funktion" gut verzichten kann.

    MfG,

    Probe-Nutzer



  • Da bei MS Windows der Pfad dazu gehört, ist der Start in der Konsole schon lästig, kann mich noch gut an meine eigene DOS-Zeit erinnern.



  • Probe-Nutzer schrieb:

    Dem kann ich nur zustimmen. Immer, wenn ich eine solche Frage bezogen auf das typische "Warum schliesst sich das Programm sofort-Problem" beantworte, füge ich immer zusätzlich an, dass es sich um "Konsolen"-Programme handelt, die nicht umsonst diesen Namen haben, und man doch auf eine "Warten-Funktion" gut verzichten kann.

    woran ich gedacht habe: wenn hier ab und zu mal jemand einen (etwas) längeren code einfügt, wo man irgendwie gleich zu anfang sieht, dass es viel anzumerken gibt, ist es ganz gut, den rauszukopieren und mit g++ -W -Wall -ansi -pedantic zu kompilieren, und dann einfach eine fehlermeldung nach der anderen auf deutsch hier als hinweis reinzuposten - im besten fall kann man dann das programm auch gleich testen, und es ist mir sicher mehr als zweimal passiert, dass ich dachte, irgendetwas stimmt mit der eingabe nicht, wenn das programm nicht gleich nach beendigung der aufgabe schließt.



  • Erhard Henkes schrieb:

    Da bei MS Windows der Pfad dazu gehört, ist der Start in der Konsole schon lästig, kann mich noch gut an meine eigene DOS-Zeit erinnern.

    Ja, diese Zeiten kenne ich auch noch gut, aber während der Entwicklung einer Konsolen-Anwendung:

    Konsole öffnen, Pfad zur Konsolen-Anwendung einmalig eingeben, testen, offen lassen, mit Pfeiltasten Programmnamen immer wieder zurückholen...

    Und wenn die Anwendung dann fertig ist?

    Umgebungsvariable PATH um den Pfad zu eigenen Konsolenprogrammen ergänzen, Konsole öffnen (entspricht Explorer öffnen auf Windowssystem), nur den Konsolenprogrammnamen eingeben (entspricht Doppelklick auf Programm), oder Explorer mit Verzeichnis der Anwendung öffnen, und Programm in ein Konsolenfenster "drag 'n' droppen", Pfad steht in Konsolenfenster, oder...

    Also eigentlich nichts, das allzu lästig sein sollte...

    MfG,



  • Also eigentlich nichts, das allzu lästig sein sollte...

    Ich hätte kein Problem damit, aber viele wollen ihren PC schon am liebsten "sprachsteuern". 😉



  • Ich möchte mal kurz das Besondere an Code::Blocks herausstellen.

    Das Tolle an Code::Blocks sind die Multi-Compiler Fähigkeiten. Darin ist es ungeschlagen. Ich habe Code::Blocks mit GCC, VC++ 7.1 inkl. Platform SDK und Debugging Tools, dem Mars D Compiler und jeder Menge Libs portabel konfiguriert, so dass ich Code::Blocks mitsamt den Compilern und Libs bequem als eine Einheit von PC zu PC kopieren kann und die Projekte dort sofort kompilierbar sind. Praktisch finde ich auch, dass Projekte Targets, die verschiedenen Compilern zugeordnet sind, haben können.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ja, Code::Blocks ist eine tolle IDE. Für C++ nehme ich allerdings lieber MS VC++ 2008. 👍



  • Hallo,

    bin ebenfalls noch Anfänger und versteh nicht so richig, was schief läuft.

    Ich kann kein einziges Programm kompilieren. Es kommt die Meldung: "It seems that this file not has been built yet. Do you want it build now" Wenn ich auf "Ja" gehe dann springt unten der Tab auf Build log und nichts steht darin. Drücke ich auf "Nein" geht ganz normal die Konsole auf aber zB mein Hallo Welt Programm wird nicht ausgeführt. Es steht nur

    Process returned 0 (0x0) execution time : 0.000 s
    Press any key to continue.

    drin.

    Auch wenn ich absichtlich irgendwelche Fehler einbaue wird das nicht beachtet. Es wird einfach gar keine *.exe erzeugt. Hab das Programm schon mehrmals neu installiert. Komischerweise funktioniert auf meinem anderen Rechner das Programm tadellos. Nur an meinem älteren Laptop geht nichts. Hab ausserdem noch MS Visual C# installiert.
    http://img180.imageshack.us/my.php?image=clipboard02mz8.jpg

    Ich hoffe irgendjemand hat einen Tipp. Google und die offiziellen FAQ's hab ich schon durch. 😞 Welche Informationen werden sonst noch gebraucht um das Problem zu beseitigen?


Anmelden zum Antworten