• Hallo an alle!

    Ich habe da mal ein paar Fragen bezüglich c++.

    Da ich nächstes Jahr auf ne weiterführende Schule gehe und Informatik als Leistungskurs wähle und dort mit c++ programmiert wird möchte ich schon ein wenig c++ lernen.
    Ich bin noch genau am Anfang. Ich hab mir ein Buch gekauft in dem die Grundkenntnisse erläutert werden. (bin gerade bei Klassen und Funktionen :D)
    Frage 1: Stimmt es, dass AutoIt in c++ programmiert wurde?
    Frage 2: Stimmt es, dass Windows mit c++ programmiert wurde und deshalb die systemnahste Programmiersprache ist?
    Frage 3: Mit AutoIt kann man ja per DllCall Programmbibiliotheken wie Kernel32.dll oder User.dll nutzen. Sind diese Funktionen in c++ oder in Maschinensprache (Assembler?!) geschrieben worden?
    Frage 4: Wenn sie mit c++ sind, kann man sich dann Funktionen in c++ schreiben und diese in AutoIt nutzen?
    Frage 5: Wenn jemand von euch schon gute GUI´s in c++ erstellen kann, wie lange hast du dann dafür gebraucht?
    Frage 6: Kennt jemand ein gutes Tutorial für c++ GUI´s ?
    Frage 7: Wie wurde c(++) programiert, wenn es ja noch kein Windows gab?

    Diese Fragen interessieren mich wirklich sehr :) besonders Nr.4 und 7 :D

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    zu1 ) Ja. Es gibt sicherlich intern auch ein paar C Funktionen.
    zu2 ) Nein. Windows ist in mehreren Sprachen programmiert. Assembler, C, C ++ und einzelne Teile auch in .Net usw.
    zu3 ) Ebenfalls unterschiedlich.
    zu4 ) Ja, kann man.
    zu5 ) Dafür gibt es auch Dinge wie KODA.
    zu 6) google
    zu 7) LOL, kein Mensch braucht dafür Windows.

  • Ganz schön viele Fragen ;)

    1. Keine Ahnung...
    2. Zumindest Teile C++. Achja, das hier hab ich grad gefunden: Windows 2000 SourceCode :rofl: :

    Spoiler anzeigen

    3. Das geht zumindest.
    4. Klar ;) Ein sehr gutes Beispiel ist das RSA-Plugin von peethebee :rock:
    5. Sorry, aber ich wills erst noch lernen. Das heißt: Hello World hab ich schon, mehr nicht :whistling:
    6. Leider nein... Wenn ich eins finden sag ichs dir :)
    7. Eine meiner häufigsten Fragen, ganz nach dem Motto "Wer war zuerst da, das Huhn oder das Ei?". Villeicht hat sich jemand Magneten genommen, eine Festplatte in die Nähe gebracht und drauf gehofft, dass was passiert :rofl:

    So, hoffentlich konnte ich etwas helfen :)

  • Zitat

    Frage 1: Stimmt es, dass AutoIt in c++ programmiert wurde?


    Ja.

    Zitat

    Frage 2: Stimmt es, dass Windows mit c++ programmiert wurde und deshalb die systemnahste Programmiersprache ist?


    Das kannst du so gar nicht sagen. Treiber/Bootloader/Kernel/usw. in Assembler. Ansonsten größtenteils in C.

    Zitat

    Frage 3: Mit AutoIt kann man ja per DllCall Programmbibiliotheken wie Kernel32.dll oder User.dll nutzen. Sind diese Funktionen in c++ oder in Maschinensprache (Assembler?!) geschrieben worden?


    Könnte sein, ja, aber es gibt auch noch andere Programmiersprachen die DLLs erstellen können.

    Zitat

    Frage 4: Wenn sie mit c++ sind, kann man sich dann Funktionen in c++ schreiben und diese in AutoIt nutzen?


    Ja.

    Zitat

    Frage 5: Wenn jemand von euch schon gute GUI´s in c++ erstellen kann, wie lange hast du dann dafür gebraucht?


    Länger als mit AutoIt. Es geht, aber man muss sich reinarbeiten und du darfst das auf keinen Fall mit AutoIt GUIs vergleichen.

    Zitat

    Frage 6: Kennt jemand ein gutes Tutorial für c++ GUI´s ?


    Lern zuerst mal mit der Konsole umzugehen. Das andere kommt später von alleine, aber zuerst musst du überhaupt mal wissen was du das überhaupt machst.

    Zitat

    Frage 7: Wie wurde c(++) programiert, wenn es ja noch kein Windows gab?


    C++ wird durch den Compiler in Assembler übersetzt. Dazu könntest du dir einiges an Informationen verschaffen (fang mal auf Wikipedia an Compiler)

  • Du solltest vielleicht eine Programmiersprache eher als Abstraktionsebene sehen. Natürlich macht es keinem Programmierer Spass in ByteCode zu programmieren. Das kann man ja kaum lesen. Deswegen wurde eine erste Abstraktion erstellt --> Assembler. Dort gibt es nur relativ wenige und sehr einfache Befehle. Aber immerhin man "hat" Befehle und kann sie benutzen. Allerdings ist diese Hopserei mit den Speicheradressen auch nicht gerade sehr toll zum Lesen. Aber immerhin existiert ein compiler der den unleserlichen assemblercode in noch unleserlichen bytecode (nur der kann ja vom Prozessor verarbeitet werden). Also ging man weiter und "erfand" die sogenannten Hochsprachen. Diese sind weitere Abstraktionsebenen aber im Prinzip werden sie alle wieder runtercompiled.
    Warum diese Abstraktion?
    Das hat nur einerseits mit der lesbarkeit des Codes zu tun. Viel wichtiger ist natürlich auch das du dein Programm auf möglichst vielen Rechnern und Systemen laufen lassen kannst.
    Damit das wiederum funktioniert brauchst du einen Compiler der deinen Code auf dein System "zuschneidet". Genau das ist die (Haupt-) Aufgabe von Betriebssystemen. Sowie die Betriebssysteme über Treiber deinem Code funktionen zur Verfügung stellen wie read&write operations etc.
    Achso: Eine Ausnahme ist hier z.b. Java. Damit man nicht so viele verschiedene Compiler braucht benutzt Java die Virtual Machine. Dadurch wird auf dem Rechner selbst erstmal eine eigene Umgebung für das Java-Programm erschafft (während der Laufzeit) in der dein Code ausgeführt wird.

    Sooo ich hoffe ich hab nicht allzu viel mist verzapft :D

    //Edit:
    Ui da haben aber viele gepostet während ich meinen Text geschrieben hab o_O

    @Arkaneus
    Der Code ist mal übelst witzig ich hab immernoch tränen in den Augen xD
    Gibts das auch für Vista?
    Eig. müsste es da ja reichen wenn man nur bis if(is_not_crashed) geht. Alles andere danach kann man wohl ehh schon vergessen :thumbup:

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • aber wenn man in "ByteSprache" etwas schreibt, wie kann man daraus die anderen Sprachen entwickeln?
    ich kann mir das nicht vorstellen...
    Wie sieht Assembler überhaupt aus?
    weil nur mit Speicheradressen was anzufangen...ich weiß nicht...

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Naja jetzt stell dir einfach mal vor: Du willst etwas aus eine Textdatei lesen.
    Klar ganz einfach: FileRead
    Aber! Es gibt nicht nur zig verschiedene Betriebssysteme sondern auch andere Dateisysteme und auch unterschiedliche Festplatten. Damit der Computer das versteht braucht er im Prinzip viele Anweisungen um diese Datei zu lesen:
    1. Festplatte ansteuern
    - Festplatte muss jetzt den Lesekopf an die richtige Position führen
    - Warten bis sich die Platte richtig hingedreht hat
    - Dann von Anfang bis Ende vom Cluster lesen
    Dann wird das wieder an den Prozessor übergeben und in den Arbeitsspeicher "gelagert"
    (ja da fehlt noch einiges aber soll nur veranschaulichen wie viel eig. hinter so einem befehl steckt)

    Wenn du das jetzt für deinen PC machen würdest (bräuchtest du schonmal sehr viel code) und es würde wahrscheinlich nur auf deinem rechner laufen. Oder einem der die gleiche Hardware und das gleiche Betriebssystem mit den gleichen Treibern hat. Das ist natürlich nicht in deinem Sinne. Also soll doch jemand anders die Arbeit übernehmen: der Compiler.
    Das Betriebssystem (das wiederrum einen Compiler zur Verfügungs stellt) stellt nun sicher das dein einfacher Befehl auch richtig umgesetzt wird. (oder auch nicht^^)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Zitat

    aber wenn man in "ByteSprache" etwas schreibt, wie kann man daraus die anderen Sprachen entwickeln?

    Mal angenommen, ich möchte folgenden Text "Hallo, hier ist ein Text" auf einem Rechner mit einem x86 Prozessor ausgeben. Der Prozessor verarbeitet nur Nullen und Einsen in Form von Bits und Bytes, Register müssen geladen werden, bestimmte Prozessorflags gesetzt, Speicher muss beschrieben werden .....
    Für die "einfachste" Prozessorsprache nehmen wir das Beispiel Assembler, welcher einfache Befehle (fast 1 zu 1) in ausführbaren Bytecode übersetzt. Mal angenommen, ich habe folgenden Assemblercode,

    Code
    Text db 'Hallo, hier ist ein Text'  ;schreibe einen Text in den Speicher an eine bestimmte Adresse
    mov  dx,offset Text       ;lade die Speicheradresse von Text in das Register DX
    mov  ah,09                ;lade die Hexzahl 09 ins Highbyte vom Register AX (Zeichenkette darstellen)
    int  21h           ;löse den Prozessorinterrupt 21h aus


    dann wird mit diesem Code ein bestimmter Text ausgegeben. Wie du unter diesem Link nachlesen kannst, existieren allein für den int21 über 100 Funktionsaufrufe. Allerdings gibt es noch viele andere Interrupts um Daten innerhalb des Speichers und der Prozessorregister hin- und herzuschieben, mal abgesehen von den hunderten Prozessorbefehlen
    Wenn du nun dieses "Programm" in Maschinensprache umwandelst (das macht der Assembler), dann sieht es für einen x86 Prozessor so aus:
    0xBA0D01B409CD21EB00B44CCD2148616C6C6F2C20646173206973742065696E20546578742E24

    Du kannst dieses "Programm" laufen lassen indem du es in eine Datei schreibst und diese Datei dann aufrufst.
    Allerdings muss man dazu eine DOS-Box öffnen und den Dateinamen eintippen (nix für Mausschubser^^ )
    Aber auch AutoIt kann Dateien schreiben, also nehmen wir unseren Bytecode uns schreiben ihn in eine Datei namens Demo.COM

    [autoit]

    $handle=fileopen(@scriptdir&"\demo.com",18)
    filewrite ($handle,"0xBA0D01B409CD21EB00B44CCD2148616C6C6F2C20646173206973742065696E20546578742E24")
    fileclose($handle)

    [/autoit][autoit][/autoit][autoit]

    RunWait("cmd.exe",@scriptdir) ;eine Dos-Box öffnet sich, DEMO eintippen und Enter drücken

    [/autoit]

    Dieser Code läuft nur auf x86 Prozessoren in einem bestimmten Modus. In dieser Form wird er auf anderen Prozessoren nicht laufen....
    Wenn du diesen Code auf einem Apple-Rechner laufen lassen wolltest, oder auf deinem Handy oder in der Küchenuhr, dann müsste der Code immer auf den jeweilig in diesen Geräten vorhandenen Prozessor abgestimmt sein!

    Und um nicht für alle diese Prozessoren immer wieder bestehenden Code anzupassen, wird für jeden Prozessor ein Compiler geschrieben, der den komplizierten Vorgang "Schreibe Text" in die jeweilige Prozessorsprache übersetzt. In AutoIt heisst der Befehl "Schreibe Text" nun consolewrite(), in C heisst der Befehl printf() , in Basic Print() uswusf.
    Der C-"Compiler" für einen x86-Prozessor macht nun aus der Zeile printf("Hallo, hier ist ein Text"); das schon bekannte 0xBA0D01B409CD21EB00B44CCD2148616C6C6F2C20646173206973742065696E20546578742E24
    welches der Prozessor "verstehen" kann.
    Auf einem Applerechner lautet der Maschinencode sicher anders. Allerdings ist die Ausgabe "Hallo, hier ist ein Text" völlig identisch! Und genau das ist der Sinn und Zweck einer (höheren) Programmiersprache wie C, Basic, Fortran, Cobol usw., möglichst auf vielen Prozessoren denselben möglichst identischen Programmcode benutzen zu können! Da C ziemlich verbreitet ist, wird heutzutage kein Microprozessor mehr entwickelt, ohne gleichzeitig den dazu passenden Compiler bereitzustellen!