skoe erzählt C in 14 Tagen

Es gibt 114 Antworten in diesem Thema, welches 65.476 mal aufgerufen wurde. Der letzte Beitrag (2. November 2022 um 18:43) ist von daybyter.

  • Nehmt einen Text-Editor (am besten einen etwas besseren wie Programmers Notepad, Ultra Edit, Crimson Editor u.v.m., der C auch als Sprache kennt und ganz schön toll bunt macht.).

    Erzeugt eine leere Datei und speichert sie nach (Beispiel-Pfad) e:\ckurs\hello.c. Dann tippt mal das ab. Und wirklich lieber tippen statt kopieren, so merkt man es sich besser:

    Code
    #include <stdio.h>
    
    
    void main()
    {
        puts("Hello world");
    }

    Wir wollen heute wirklich noch nicht darüber nachdenken, was das Zeugs bedeutet, sondern es lediglich starten können. Bitte achtet vom Anfang an an eine korrekte Einrückung.

    So, dann nochmal speichern und ein DOS-Fenster aufmachen. Da gibt's dann folgende Session (Der scharfsinnige Leser erkennt sicher, was ich getippt habe und was der Computer ausspuckt):

    Code
    E:\ckurs>cl65 -o hello.prg hello.c
    
    
    E:\ckurs>dir
    26.01.2009  22:10                67 hello.c
    26.01.2009  22:19               556 hello.o
    26.01.2009  22:19               961 hello.prg
                   3 Datei(en),          1.584 Bytes

    Wenn dort eine Fehlermeldung kommt, bitte überprüfen:
    - Verzeichnisse richtig ausgepackt?
    - Drei Variablen richtig gesetzt (PATH, CC65_INC, CC65_LIB)?
    - Alles richtig abgetippt?

    Die hello.prg sollte man jetzt mit dem Vice starten oder einem echten C64 zukommen lassen.

    Na, klappts?

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • oder sich so eine batchdatei stricken


    Auch eine gute Möglichkeit. Aber nicht vergessen, sie jedesmal nach dem Öffnen eines DOS-Fensters aufzurufen, sonst :cry

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Hat Du schon den M$-Support angerufen? Hilft Bitte melde dich an, um diesen Link zu sehen. ?


    Uuuaaahhhh, das meinst Du doch jetzt nicht ernst, oder ;)
    edit: auf so was klicke ich nicht /edit:

    Wenn einer, der mit Mühe kaum, geklettert ist auf einen Baum, schon meint, daß er ein Vogel wär, so irrt sich der.

    Wilhelm Busch

  • Welchen 'EDieter' benutzt Du ?
    Gibt es irgendwas mit Syntax-HighLightning ?
    :winke:

    Wenn einer, der mit Mühe kaum, geklettert ist auf einen Baum, schon meint, daß er ein Vogel wär, so irrt sich der.

    Wilhelm Busch

  • Na Holladiewaldfee! So viel Code für sooo wenig getippse!!! Rock'n'Roll :)

  • Zitat

    void main()

    besser:

    Code
    int main(void)

    das entspricht dann dem standard und gibt folglich auch keine warnung :) (und macht sogar ein klitzekleines bischen besseren code)

  • Ich probier das morgen mal aus.
    cu. :winke:
    :winke:

    Wenn einer, der mit Mühe kaum, geklettert ist auf einen Baum, schon meint, daß er ein Vogel wär, so irrt sich der.

    Wilhelm Busch

  • Welchen 'EDieter' benutzt Du ?
    Gibt es irgendwas mit Syntax-HighLightning ?

    Ich verwende den Bitte melde dich an, um diesen Link zu sehen. Editor.

    +frei
    +kostenlos
    +schnell
    +ressourcenschonend
    +syntax highlight für fast alles: C, C++, 6502 assembler, 80x86 assembler, basic ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • int main(void)


    Als ich void geschrieben habe, wusste ich schon, dass das kommt. Deshalb ja die Bitte im ersten Post. Also wenn Du da int schreibst, sollte das "return 0" nicht fehlen. Und das macht das Minimal-Programm nicht mehr sooo minimal. Und bei meinem cc65 mit der oben geschriebenen Kommandozeile kommt keine Warnung (hab allerdings noch nicht auf den Snapshot aktualisiert).

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • skoe:
    könntest Du auch noch erklären, was genau nun Assembler-mäßig aus unserem C-Code wird?
    Also beim Blick in den Monitor sehe ich, dass ja da allerhand abgeht (sogar IRQ) ...
    so dass man dann immer direkt Vergleichen kann: was passiert in C - was wir am Ende kompiliert

  • Oha, das schreckt mich aber schon wieder ab:
    Wo ein IRQ kommt möchte ich alleine bestimmen.
    Naja, alles hat seine Vor-und Nach-Teile ;)
    edit: bin weiterhin dabei /edit:

    Wenn einer, der mit Mühe kaum, geklettert ist auf einen Baum, schon meint, daß er ein Vogel wär, so irrt sich der.

    Wilhelm Busch

  • Zitat

    Als ich void geschrieben habe, wusste ich schon, dass das kommt. Deshalb ja die Bitte im ersten Post. Also wenn Du da int schreibst, sollte das "return 0" nicht fehlen. Und das macht das Minimal-Programm nicht mehr sooo minimal. Und bei meinem cc65 mit der oben geschriebenen Kommandozeile kommt keine Warnung (hab allerdings noch nicht auf den Snapshot aktualisiert).

    die sache ist halt das der standard nur die kurze "int main(void)" und lange "int main(int argc,char *argv[])" form zulässt, alles andere mag zwar syntaktisch stimmen, aber ist per definition trotzdem falsch.... und der compiler muss es nicht akzeptieren. dh selbst wenns mit cc65 jetzt geht heisst das nicht das es in 3 wochen auch noch geht :) (und ich bin mir fast sicher des es eine warning gibt... Uz ist in der beziehung sehr pingelig, zum glück :))

    Zitat

    könntest Du auch noch erklären, was genau nun Assembler-mäßig aus unserem C-Code wird?

    kompilere einfach mal so:

    cc65 test.c -o test.s

    dann kannst du dir den generierten assemblercode in test.s anguckn (gibt auch irgendeine option das er in den asm code immer den c-code als kommentare reinschreibt, die weiss ich grad nicht auswendig)

  • Ich verwende den ConText Editor.


    Den hattest Du mir auch mal empfohlen. Hatte ich jetzt nicht mit Absicht vergessen, kam aber nicht mehr auf den Namen, benutze selten Windows.

    Na Holladiewaldfee! So viel Code für sooo wenig getippse!!! Rock'n'Roll


    In den reichlich 900 bytes steckt noch ein bischen mehr als unser Getipse, nämlich Teile der C-Bibliothek und der Laufzeitumgebung. So ähnlich als würden wir zu einem Assembler-Programm ein Stück vom Kernal dazupacken.

    Dieser Größenzuwachs ist besonders auffallend bei sehr kleinen Programmen. Aber nichts desto trotz ist C im immer größer als ein gleiches Assembler-Programm.

    @sauhund: Benutzen die cc65-Libs eigentlich den Kernal? Bin zu faul zum nachsehen und Du weißt das doch sicher aus dem Kopf.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Ja, der Kernal wird benutzt. Sehe ich gerade im Vice-Monitor.

  • Na eigentlich wollte ich die ganzen 14 Tage nicht heute abhandeln, aber wenn schon jemand fragt:

    Wenn man die Kommandozeite

    Code
    cc65 hello.c -o hello.s


    benutzt, wird das in hello.s ausgegeben, was der Compiler sonst intern weiterverwendet (bitte nicht wieder Bemerkungen wegen dieser ungenauen Beschreibung)

    Unser String wird so abgelegt:

    Zitat


    L0001:
    .byte $C8,$45,$4C,$4C,$4F,$20,$57,$4F,$52,$4C,$44,$00

    Aus der Funktion (Begriffserklärung morgen) main wird das (gekürzt):

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • ...
    aber nu geht's weiter mit "Hello World"...


    Super skoe auch ich bin dabei. Brenne darauf, das es weiter geht. Klasse bisher gemacht.

    Gruß ZX81AMIGA :winke:

    IT IS TRUE, THAT ALCOHOL DOESN'T SOLVE ANY PROBLEMS! :bia BUT WHO SAID MILK DOES?