Ergebnis 1 bis 7 von 7

Thema: [N00bfrage] C++ Compilereigenheiten?

  1. #1

    [N00bfrage] C++ Compilereigenheiten?

    Also, ich hab da ein kleines Problem, muss aber im Vorraus schon sagen, dass ich wirklich ein richtig blutiger Anfänger im Bereich der Programmierung mit C++ bin (2 Tage erst ^^). Und äh, ihr werdet mich jetzt zwar auslachen, aber ich krieg das einfach nicht hin, ein ganz simples "Hello World"-Programm auf die Beine zu stellen. Mein Problem:

    Ich hab mir vorgestern das Buch "Jetzt lerne ich C++" gekauft. Die Autoren arbeiten mit dem Borland C++BuilderX-Compiler, doch wird erwähnt, dass die im Buch erklärten Codes eigentlich mit den anderen Compilern auch laufen sollten. Da ich den Bloodshed-Compiler schon installiert und mich dort schon ein wenig eingefunden hab, dachte ich mir, ich benutzten den einfach, da er ja auch im Forum hier recht gutes Feedback erhalten hat. Doch funktionieren die Beispielcodes vom Buch nicht, genau so wenig wie die der meisten Tutorials, die ich gefunden habe.
    Wie bereits gesagt, ich benutzte den Bloodshed, und folgende Codes funktionieren nicht:

    Code:
    #include <iostream> 
    
    int main()
    {
    std::cout << "Hello World!\n";
    return 0;
    }
    Der Code wie er im Buch steht.


    Code:
    #include <iostream.h>    
    
    void main()   
    {   
     cout << "Hello World" << endl; 
     }
    Der Code stammte von vierten Tutorial auf folgender Seite: Robsite

    Der einzige Code der bei mir funktioniert, war der, der bei der Hilfe mit Bloodshed mitgeliefert wurde nähmlich:

    Code:
    #include <iostream>
    
    using namespace std;
    
    int main (int argc, char *argv[])
    {
      cout << "Hello World!" << endl;
      cout << "Press ENTER to continue..." << endl; 
      cin.get();
      return 0;
    }
    Jetzt zu meiner Frage: Eigentlich hatte ich mir vorgestellt, dass C++ auf allen Compilern so ziemlich das gleiche ist bzw. auf allen Compilern die gleichen Codes funktionieren. Wie ich gemerkt habe ist dem aber nicht so. Mach ich jetzt irgendwas falsch, oder sind die Codes bei den verschiedenen Compilern wirklich so individuell bzw. hat jeder Compiler seine Eigenheiten, sodass ich C++ bei jedem anders anwenden muss?

    Noch kleine Anmerkung von mir: Ich habe bemerkt, dass beim 1. Code den ich geschrieben hab (also bei dem vom Buch) ganz, ganz kurz das "Eingabeaufforderung" Fenster (Start -> Zubehör -> Eingabeaufforderung) aufblitzt. Aber wirklich nur enorm schnell. Kann es sein, dass ich den Code richtig geschrieben hab, der Compiler ihn auch versteht, aber das Programm einfach in einer zu grossen Geschwindigkeit abläuft und darauf wieder beendet ist, dass ich das gar nicht sehen kann?

    Thx für eure Hilfe!
    Mfg Biosfear

  2. #2
    Das du die Libraries ohne das ".h" angibst ist schon ok so, allerdings musst du darunter dann noch diese Zeile hinzufügen:
    using namespace std;

    Dann sollte auch der erste Code im DevC++ laufen.

    Wegen dem automatischen Schließen der Console -> einfach am Ende der Mainfunktion ein cin.get(); einbauen, dann wartet die Console auf einen Tasteneingabe.

    EDIT: Ich seh gerade, der Code der in der Hilfe war (der letzte) hat auch ein cin.get() dabei. Da hättest du es dir absehen können.
    Und auch ein using namespace std; ...

    Zu den Compilerunterschieden: Solange du Standardgemäßes C/C++ schreibst, sollte das überall laufen. Schwierig wird es, wenn du etwa die Borland-Funktionen für die GUI verwendest oder solche Scherze wie StrToInt() und so... Das sind nämlich Borland-eigene Funktionen und kein C/C++. Aber wie gesagt, solange es korrekter C/C++ Syntax ist, gibt es da normalerweise keine Probleme mit dem Übertragen der Codes in andere Compiler. Wenns Fehlermeldungen gibt, einfach hier posten, dann kann dir da auch geholfen werden.

    EDIT2: void main() ist nicht mehr aktuell. So leid es mir tut, dein Buch ist wohl nicht mehr aktuell. Die Main-Funktion gibt einen IntegerWert zurück, so hat man das wohl mal vereinbart. Früher konnte man wohl mal void main() schreiben, heute bei den aktuellen Compilern muss es int main() sein. (Ältere Versionen kennen es anders, manche neueren sind auch nachsichtig und nehmen beides).
    Was etwas verwirrend ist, das Buch ist angeblich erschienen am 8.12.2004, dann müsste es längst die Sache mit int main() drinne haben. Entweder wurde da schlampig gearbeitet oder ein älteres Buch einfach neu aufgelegt ohne Rücksicht auf neue Standards. Jedenfalls solltest du, wenn du Fehler bei solchen Codes erhälst, sehen ob der Code eventuell nicht mehr aktuell ist.

    Geändert von Ynnus (03.06.2005 um 17:37 Uhr)

  3. #3
    deine vermutung stimmt. der erste code funktioniert, aber du benutzt keinen befehl, der das programm z.b. zum schluss auf eine taste warten lässt und somit kannst du den text gar nicht lesen.
    der zweite code ist einfach kein c++-standard und deswegen compiliert der compiler es nicht. es gibt compiler, die da toleranter sind.
    wenn du das programm zum schluss anhalten möchtest, damit du z.b. text lesen kannst, der eigentlich direkt verschwinden würde kannst du die zeile aus dem 3. code zum ende der main-funktion schreiben: "std::cin.get();" bzw. "cin.get();" wenn du "using namespace std;" vorher reingeschrieben hast. außerdem für den befehl immer die "iostream"-bibliothek einbinden.

  4. #4
    Endlich, vielen Dank euch beiden, das mit dem cout::cin.get(); hat hingehauen.
    Und special thanks an dich Ynnus für die Erklärung noch mit den Compilern.
    Btw. Das void main() stammt nicht aus dem Buch, das hab ich von einem Tutorial der Robsite (das vierte von oben link). Da der Code aus dem Buch "nicht funktioniert" hat, hab ich mich halt einfach mal nach einem Tutorial umgesehen, um zu schauen ob da evtl. etwas schlaues dabei war. Doch dann bin ich nur noch stutziger geworden, da ja bei diesem Tutorial eine noch andere Version des "Hello World"-Programms vorlag.
    Nur der erste Code, den ich gepostet hab, steht im Buch, und der funktioniert jetzt auch .

    Ich meld` mich dann wieder wenn ich mal wieder so eine Frage hab` (die wirds ganz bestimmt geben ).
    Danke euch beiden!

    Mfg Biosfear

  5. #5
    Zitat Zitat von Ynnus
    Wegen dem automatischen Schließen der Console -> einfach am Ende der Mainfunktion ein cin.get(); einbauen, dann wartet die Console auf einen Tasteneingabe.
    Alternativ startet man das Programm einfach von der Konsole aus.

    Zitat Zitat
    void main() ist nicht mehr aktuell. So leid es mir tut, dein Buch ist wohl nicht mehr aktuell. Die Main-Funktion gibt einen IntegerWert zurück, so hat man das wohl mal vereinbart. Früher konnte man wohl mal void main() schreiben, heute bei den aktuellen Compilern muss es int main() sein. (Ältere Versionen kennen es anders, manche neueren sind auch nachsichtig und nehmen beides).
    Was etwas verwirrend ist, das Buch ist angeblich erschienen am 8.12.2004, dann müsste es längst die Sache mit int main() drinne haben. Entweder wurde da schlampig gearbeitet oder ein älteres Buch einfach neu aufgelegt ohne Rücksicht auf neue Standards. Jedenfalls solltest du, wenn du Fehler bei solchen Codes erhälst, sehen ob der Code eventuell nicht mehr aktuell ist.
    Tatsächlich ist im C++ standard nur int main() vorgesehen, aber der C-Standard erlaubt rein theoretisch void main(). Einige Compiler lassen das durchgehen, andere nicht. Man sollte aber eigentlich immer int main() benutzen, das ist die korrekte Version.

  6. #6
    Also mein Compiler gibt mir folgendes als Vorschlag für ein standard C-Projekt raus:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      
      system("PAUSE");	
      return 0;
    }
    Also auch mit int main, dafür noch einige Parameter in der Mainfunktion.
    Wobei C++ eben das so aussehen würde:
    Code:
    #include <iostream>
    using namespace std;
    
    int main( void )
    {
        return 0;
    }

  7. #7
    Ich würe dazu raten, immer main (int, char*) zu benutzen; man weiß nie, wann man ein Programm gebrauchen kann, das Parameter annimmt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •