Allgemeine Frage zu C++ (und vielleicht zu anderen Sprachen?)



  • Hallo,

    ich bin (leider) noch Programmieranfänger und habe mich dazu entschlossen C++ zu erlernen. Ich habe mir gleich mehrere Bücher gekauft und bin bereits seit ca. 2 Monaten (intensiv) am Lernen!

    Aber etwas verstehe ich nicht:
    Nehmen wir mal an, ich würde in der MSDN den Begriff "SetConsoleTitle" nachschlagen. Als Ergebniss erhalte ich dann:
    **
    BOOL SetConsoleTitle(
    LPCTSTR lpConsoleTitle // address of new title
    );**

    und jetzt? Ich habe keine Ahnung was ich in die Klammern eintragen soll!
    Das "BOOL" vor dem "SetConsoleTitle" kann ich ja weglassen, aber was ist LPCTSTR lpConsoleTitle?

    Danke und `nen schönen Sonntag!



  • SetConsoleTitle("Hallo");



  • "SetConsoleTitle" ist eine Funktion aus der WinAPI, und die ist nunmal etwas umstaendlich, bzw. altmodisch. Und vor allen Dingen ist sie eine reine C-Bibliothek, in modernem C++ wuerde da viel anders gemacht werden.

    Nun hats Microsoft anno dazumal sinnvoll gefunden, alten Datentypen neuen Namen zu geben: BOOL ist im Grunde nichts anderes als ein "bool"-Datentyp, und LPCTSTR ist nichts anderes als "const char*".

    d.h. eigentlich kannst du

    BOOL SetConsoleTitle(
    LPCTSTR lpConsoleTitle // address of new title
    );
    

    lesen als

    bool SetConsoleTitle(const char* consoleTitle);
    

    Was dann vielleicht schon eher verstaendlich ist: const char* wird in C fuer Strings verwendet, d.h. im Grunde gibst du der Funktion einfach einen String als Parameter mit. Und zurueckgeben tut die Funktion einfach einen bool, d.h. entweder True oder False. Ohne jetzt nachschlagen zu wollen wuerd ich einfach mal tippen die funktion gibt zurueck, ob der Aufruf erfolgreich war oder nicht... aber das sollte auch in der MSDN drinnen stehen.

    Kleiner Tipp am Rande: wenn du wirklich C++ lernen moechtest dann konzentrier dich nicht so sehr auf die WinAPI, die ist naemlich haesslich, alt und uncool 😉 Zwar gibt es unter Windows fuer bestimmte Dinge keine Alternative dazu, aber fuer GUIs ( d.h. grafische Oberflaechen) gibt es heutzutage wesentlich bessere (sprich: schoenere und leichter zu programmierende) Dinge (siehe dazu den entsprehenden FAQ-Eintrag).

    EDIT: uebrigens bedeutet das "lp" for dem ConsoleTitle "long pointer", damit wollte man andeuten, dass es sich bei dem Parameter um einen Pointer (eben auf einen const char) handelt. So Kuerzel vor dem Variablennamen sollen andeuten, was fuer einen Datentyp die Variable hat. Das nennt man "ungarische Notation" und es wird dir in der WinAPI noch oft begegnen.



  • Dank, meine Frage ist beantwortet!



  • Blue-Tiger schrieb:

    d.h. eigentlich kannst du

    BOOL SetConsoleTitle(
    LPCTSTR lpConsoleTitle // address of new title
    );
    

    lesen als

    bool SetConsoleTitle(const char* consoleTitle);
    

    Nicht ganz, vielmehr als

    int SetConsoleTitle(const TCHAR* consoleTitle);
    

    Deshalb stimmt auch das Beispiel des Vorredners nicht ganz. Sollte eher so aussehen

    SetConsoleTitle(TEXT("Hallo"));
    

    Blue-Tiger schrieb:

    Kleiner Tipp am Rande: wenn du wirklich C++ lernen moechtest dann konzentrier dich nicht so sehr auf die WinAPI, die ist naemlich haesslich, alt und uncool 😉

    Naja, das ist deine Meinung. 😉 Man kann mit WinAPI auch jede Menge Spass haben. Immerhin ist WinAPI ja nicht nur GUI. Wobei ich dir Recht geben muss, für's C++ lernen ist es nichts. Immerhin ist es auch keine C++ API.



  • Blue-Tiger schrieb:

    Nun hats Microsoft anno dazumal sinnvoll gefunden, alten Datentypen neuen Namen zu geben: BOOL ist im Grunde nichts anderes als ein "bool"-Datentyp, und LPCTSTR ist nichts anderes als "const char*".

    Etwas mehr steckt schon dahinter. So ist LPCTSTR kein einfacher const char* sondern grundsätzlich für Unicode gewappnet, siehe groovemaster. Und BOOL gibt's natürlich auch nicht nur just for fun sondern deswegen, weil es in C89 keinen "bool" Datentyp gibt. Technisch handelt es sich dabei um ein int, aber mit der Semantik von bool. Deswegen ist es sinnvoll statt einfach int hinzuschreiben, ein BOOL zu definieren.



  • Hallo,

    ich habe noch eine Frage: was sind "namespaces" ???

    Danke





  • jaja...hast schon recht... VORHER GOOGLEN !!!



  • Blue-Tiger schrieb:

    Nun hats Microsoft anno dazumal sinnvoll gefunden, alten Datentypen neuen Namen zu geben:

    Was teilweise auch notwendig war: Die originale WinAPI ist noch 16-bittig! 💡


Anmelden zum Antworten