Hello, Guest the thread was called7.8k times and contains 50 replays

last post from logan at the

C-Kurs, Abend 2

  • So, der Abend 2 ist fertig.


    Hier ist der Link:
    http://skoe.de/wiki/doku.php?id=ckurs:02-abend2


    Es war etwas schwierig, sich einerseits so kurz zu fassen, dass der Teil an einem Abend lesbar (und verstehbar) ist und andernfalls einen sinnvolles "Paket" enthält.


    ogd hat mir mit Probelesen und vielen Verbesserungsvorschlägen und sehr weitergeholfen, das Ding einigermaßen rund zu kriegen. Ein dickes Dankeschön an ihn!


    Fragen und die Lösungen zu den Aufgaben könnt ihr hier posten und diskutieren.


    Viel Spaß!

  • Bug: 16-bit-Ints gehen von -32768 bis 32767, im Text steht -32767 bis 32768.


    Bei dem Hinweis, dass es in jedem C-Programm genau ein main() geben muss wäre IMHO noch ein Satz angebracht wieso dem so ist (weil die Ausführung da startet) und evtl. direkt ein Vergleich zu BASIC (da startet die Ausführung bei RUN in der ersten Zeile während bei C die Reihenfolge der Funktionen im Quellcode teilweise egal ist).


    Ansonsten ist mir nur noch ein cc65-Doku-Bug aufgefallen, die Mischung von Variablendeklarationen und Code sollte bei einem ISO C99-Compiler eigentlich möglich sein.


    Hmm, ob wohl jemand das "%03d - dito, fülle aber mit '0' auf" auf die offensichtliche Art missverstehen wird?

  • > Habe es schon gelesen,
    Die ganze Lektion? Für einen nicht-C-Kenner warst Du aber schnell.


    > hoffe ich konnte DIR weiterhelfen.
    Meinst Du wegen des toten Links? Danke.


    > Kannst Du mir dann den kompletten Kurs als PDF schicken?
    Wie meinen? Willst Du das drucken? Kann Dein Browser doch sicher auch. Hab's direkt im Wiki editiert, weil das Markup von dem Teil recht flott zu tippen ist.


    Gruß,
    Thomas

  • Danke für die konstruktiven Tips!


    Quote

    Bei dem Hinweis, dass es in jedem C-Programm genau ein main() geben muss wäre IMHO noch ein Satz angebracht wieso dem so ist (weil die Ausführung da startet) und evtl. direkt ein Vergleich zu BASIC (da startet die Ausführung bei RUN in der ersten Zeile während bei C die Reihenfolge der Funktionen im Quellcode teilweise egal ist).


    Gute Idee, mach ich.


    > Ansonsten ist mir nur noch ein cc65-Doku-Bug aufgefallen, die Mischung von Variablendeklarationen und
    > Code sollte bei einem ISO C99-Compiler eigentlich möglich sein.
    Weil ich mir selbst nicht sicher war, habe ich es ausprobiert:
    gcc -std=c89 => geht (allerdings ohne "//")
    gcc -std=c99 => geht (jeweils auch kombiniert mit -ansi, falls das dann noch was bewirkt, ob "-" oder "--" jetzt ohne Gewähr)


    Im C99-Standard hab ich's nicht auf Anhieb gefunden und wegen des obigen Experiments auch nicht mehr gesucht.


    cc65, aktueller snapshot, unabh. von --standard:


    Könnte das wegen der hartnäckigen Fehlermeldung auch ein Compiler-Fehler sein?


    > Hmm, ob wohl jemand das "%03d - dito, fülle aber mit '0' auf" auf die offensichtliche Art missverstehen wird?
    Man merkt wohl, dass ich in der Zeile schon ziemlich müde war. Das Missverständnis ereilt wohl jeden außer dem, der's geschrieben hat: Was ist die offensichtliche Art?

  • Weil ich mir selbst nicht sicher war, habe ich es ausprobiert:
    gcc -std=c89 => geht (allerdings ohne "//")
    gcc -std=c99 => geht (jeweils auch kombiniert mit -ansi, falls das dann noch was bewirkt, ob "-" oder "--" jetzt ohne Gewähr)


    Im C99-Standard hab ich's nicht auf Anhieb gefunden und wegen des obigen Experiments auch nicht mehr gesucht.


    Ich habe dafür auch nur einen Blick in die gcc-Doku geworfen, im Standard würde ich wohl jetzt noch suchen. Bei Tests mit gcc lohnt sich teilweise noch ein "-pedantic" auf der Kommandozeile zu ergänzen damit wirklich alle Erweiterungen abgeschaltet sind, aber die Doku dazu warnt dass das auch kein 100%iger-Test auf ISO-Konformität ist.


    Quote

    Könnte das wegen der hartnäckigen Fehlermeldung auch ein Compiler-Fehler sein?


    Sieht zumindest so aus als ob der Parser da in einer Schleife festhängt.


    Quote

    > Hmm, ob wohl jemand das "%03d - dito, fülle aber mit '0' auf" auf die offensichtliche Art missverstehen wird?
    Man merkt wohl, dass ich in der Zeile schon ziemlich müde war. Das Missverständnis ereilt wohl jeden außer dem, der's geschrieben hat: Was ist die offensichtliche Art?


    Ob man wohl statt der 0 ein anderes Zeichen angeben kann mit dem dann aufgefüllt wird?

  • achso zum kurs:


    - fussnoten sollten jeweils nach jedem abschnitt und nicht gaaaaaaaaaaaaaaanz weit unten auf der seite stehen. das nervt :)
    - bezüglich kommentaren fehlt mir der hinweis das c++-style kommentare zwar von vielerlei compilern geschluckt werden, ABER es oft trotzdem sinnvoll ist auf diese zu verzichten, sofern man auf portabilität wert legt. im VICE source zb sind c++ kommentare verboten (mal als beispiel, bei sehr vielen projekten ist das genauso). alles in allem würde ich bei einem C kurs die c++-style kommentare einfach garnicht erwähnen. in der beziehung versaut man sich den stil noch früh genug =)
    - "Zwischen Anweisungen mitten in einem Block können beim cc65 keine weiteren Definitionen folgen." würde ich anders formulieren, besagtes verhalten hat nämlich nichts mit cc65 sondern dem unterstützten c standard zu tun. (allgemein sollte es selten bis nie nötig sein auf cc65 spezifisch bezug zu nehmen, das verwirrt nur)

  • a = 7 und dann in der nächsten zeile direkt a = 12


    Das liegt nicht an Dir. War einfach ne blöde Idee. Der Code macht wirklich, was Du glaubst das er tut. Ändere ich besser gleich morgen, ist zu verwirrend.


    edit: erledigt. Jetzt ist es hoffentlich weniger albern.

  • int main(void)
    {
    int a;

    {
    int b;
    b = 1;
    }


    {
    a = 1;
    int c;
    c = 1;
    }

    }


    Wath ist dat denn ....ohh...ohh...
    Wer schreibt denn so ein "C-Programm", ist das noch von Conrad Zuse anno 1949? :roll:


    mfg