C-Kurs, Abend 6 - Verbesserungsvorschläge


    • skoe
    • 27843 Aufrufe 83 Antworten

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • C-Kurs, Abend 6 - Verbesserungsvorschläge

      Abend 6: Der springende Punkt
      skoe.de/wiki/doku.php?id=ckurs:06-abend6

      Weil ja erfahrungsgemäß immer Bugs drin sind wieder die Fragen: Was ist falsch oder zu ungenau? Was kann man kürzer oder besser beschreiben?
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Kleine Stilfrage :
      Ich würde das "while" in einem deiner Codebeispiel immer hinter die geschweifte Klammer setzen.

      Also nicht so :

      Quellcode

      1. #include <stdio.h>
      2. int main(void)
      3. {
      4. int i = 0;
      5. do
      6. {
      7. printf("%d\n", i);
      8. i += 1;
      9. }
      10. while (i < 5); /* wuerde ich so nicht machen */
      11. }
      Alles anzeigen


      sondern so:

      Quellcode

      1. #include <stdio.h>
      2. int main(void)
      3. {
      4. int i = 0;
      5. do
      6. {
      7. printf("%d\n", i);
      8. i += 1;
      9. } while (i < 5); /*sondern so */
      10. }
      Alles anzeigen


      Grund: wenn mal mal etwas mit defines konfigurierbar machen muß, kann folgendes passieren :

      Quellcode

      1. #include <stdio.h>
      2. int main(void)
      3. {
      4. int i = 0;
      5. #ifdef COMMENTED_OUT
      6. do
      7. {
      8. printf("%d\n", i);
      9. i += 1;
      10. }
      11. #endif
      12. while (i < 5); /* Autsch ! Der Compiler compiliert das,
      13. jetzt haben wir einen sauberen Bug programmiert */
      14. }
      Alles anzeigen


      In meiner Version gibt man dem Compiler die Möglichkeit, diesen Fehler zu finden :

      Quellcode

      1. #include <stdio.h>
      2. int main(void)
      3. {
      4. int i = 0;
      5. #ifdef COMMENTED_OUT
      6. do
      7. {
      8. printf("%d\n", i);
      9. i += 1;
      10. #endif
      11. } while (i < 5); /* gibt einen Compilerfehler *
      12. }
      Alles anzeigen


      Das Beispiel ist nicht konstruiert, solche Bugs hab ich in der Realität in Projekten schon erlebt. Vor allem, wenn der Mensch, der die Änderungen macht, das "mal eben" in fremden Code einbaut :wand
    • Schade, dass Abend 6 schon 2,5 Monate her ist, und sich seitdem nichts mehr getan hat.
      Ich fand den Kurs wirklich interessant.
      Teilnahme geplant:
      22.02. - 24.02. BCC#13 Party - Berlin
      30.03. DoReCo#60 - Paderborn
      13.09. - 15.09. DoReCo-Party - Anröchte
    • Ist zwar fast zwei Jahre alt, aber ich hab da nen Fehler entdeckt...
      Kopfgesteuert while

      Es gibt noch eine andere Form der while-Schleife, die kopfgesteuert ist. Bei ihr wird die Bedingung vor dem Ausführen des Schleifenkörpers geprüft. In BASIC könnten wir das so umsetzen:

      Quellcode

      1. 10 I=0
      2. 20 IF I<5 GOTO 60
      3. 30 : PRINT I
      4. 40 : I=I+1
      5. 50 GOTO 20
      6. 60 REM SCHLEIFENENDE


      In C benutzt man für diesen Schleifentyp auch das Schlüsselwort while. Nur diesmal steht's oben:

      Sollte das nicht

      Quellcode

      1. 10 I=0
      2. 20 IF I=5 GOTO 60
      3. 30 : PRINT I
      4. 40 : I=I+1
      5. 50 GOTO 20
      6. 60 REM SCHLEIFENENDE

      heißen? Sonst würde die "Schleife" ja nie ausgeführt werden...

      Wäre schön, wenn der Kurs doch noch weitergeführt werden würde... Man soll ja die Hoffnung nicht aufgeben...
      Emuzocker sind Verbrecher - Eine Initiative zum Schutz des Originals
    • Ich finde es keine gute Idee, C am Beispiel von BASIC-Programmen zu lehren.
      Daß das BASIC 2 nicht besonders umfangreich ist, ist ja nun schon einigen bekannt und viele weichen dann auf erweiterte Version aus, die Kontrollstrukturen wie WHILE oder UNTIL kennen, was es sinnlos macht das gleiche in C auszudrücken.
    • @kpanic: Stimmt, das ist ein Fehler. Werde ich korrigieren. Danke für den Hinweis. Und schön, dass den Kram jemand liest und sogar drüber nachdenkt :)

      @+++: Mein Mathelehrer hat immer gesagt: "Bekanntes auf unbekanntes zurückführen". Oder war's andersrum? Oder bei mir eigentlich "Unbekanntes auf unbekanntes zurückführen"? Naja, egal. Jedenfalls dient BASIC in dem Kurs nur zur Veranschaulichung und dazu, keine staubigen Nassi-Shneidermann-Diagramme rauszuholen :)
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Wahrscheinlich garnicht mehr.
      Weil der am besten laufende CC65 für den C64 nicht mehr weiterentwickelt wird und der Entwickler sich zurückgezogen hat. Sterbende soll man ruhen lassen.

      Gruss
      peter
    • Ja, das ist traurig, dass eine so gute Hochsprache nicht weiter entwickelt wird.

      Und der Workshop war echt Klasse! Gut, für richtige Assembler-Profis gibt es nichts besseres als Maschinensprache. Aber gerade für Anfänger bis Fortgeschrittene hätte C sehr viel zu bieten gehabt und wahrscheinlich auch für den Profi. Aber was soll's! Wie immer geht etwas das gut ist irgendwann und meistens am Schnellsten unter.

      Gruß!
      ThomBraxton

      DoReCo #55 am Sa. 16.12.2017 :dafuer:
    • Nana, cc65 ist ja nicht weg. Ausserdem war das schon SO weit, dass es a) voll nutzbar ist und b) vermutlich nicht von der Bildflaeche verschwindet.
      Ich bin kein grosser Fan von C am c64 aber es hat sich gezeigt, dass es fuer vieles gradezu ideal ist.
      Z.B. wurde die gesamte GUI von Easyprog damit erstellt von skoe selbst.
      Das waere natuerlich auch in assembler moeglich gewesen, aber dass man derartig ausgefeilte Oberflaechen quasi SO nie sieht bei deratigen Tools hat seine guten Gruende ;)
      In den richtigen Haenden ist es sicherlich sehr sehr maechtig.

    • In den richtigen Haenden ist es sicherlich sehr sehr maechtig.


      Mächtig hin oder her...., entweder läuft es oder es läuft nicht.
      Um da jetzt noch einen Schnitt zu machen, ist die Anwenderschar zu gering.
      Und schön reden für den C64 bringt nichts, die Zeit ist abgelaufen.

      In Deutschland hat er auf den C64 keine Chance gehabt bei den Usern.
      Es kamen Lockmittel mit C-Kursen usw..., aber es half nichts.

      Die letzte Aktivität hier spricht für sich : 2011
      Ich kann einem Neuling jetzt nur Raten : Finger von die Dinger, oder er macht es allein...

      Gruss
    • Um da jetzt noch einen Schnitt zu machen, ist die Anwenderschar zu gering.
      Und schön reden für den C64 bringt nichts, die Zeit ist abgelaufen.

      In Deutschland hat er auf den C64 keine Chance gehabt bei den Usern.
      Es kamen Lockmittel mit C-Kursen usw..., aber es half nichts.

      Die letzte Aktivität hier spricht für sich : 2011
      Ich kann einem Neuling jetzt nur Raten : Finger von die Dinger, oder er macht es allein...

      so ein unsinn, cc65 wird in einer ganzen reihe projekte eingesetzt und das wird auch so bleiben. der compiler ist auch nicht tot nur weil der maintainer nun ein andrer ist, im gegenteil, endlich kommt mal wieder ein bischen schwung in die sache.

      und der c-kurs "half" primär nichts weil hier einfach nicht das passende publikum für sowas ist.
    • Das Publikum ist bestimmt vorhanden. Wenn auch nicht so zahlreich wie bei Assembler.

      Ich finde es Klasse, dass es C für den C64 gibt. Und das auch noch als Crosscompiler. Bin leider erst sehr spät darauf aufmerksam geworden, muss aber sagen, dass viele Dinge, wie Schleifen und Bedingungen in C viel einfacher bzw. für mich viel leichter verständlich sind.

      Eine gute Mischung aus C und Assembler kann bestimmt super Programme zaubern.

      Werde mich mit der Zeit mal ein wenig tiefer in diesen Bereich hinein arbeiten.

      Vielleicht kann man Skoe ja doch noch davon überzeugen, den Workshop weiter zu führen....

      Dafür bräuchten wir hier noch ein paar Rückmeldungen, die den Bedarf bekunden.

      Gruß!
      ThomBraxton

      DoReCo #55 am Sa. 16.12.2017 :dafuer:
    • Eine gute Mischung aus C und Assembler kann bestimmt super Programme zaubern.

      ja, genau das ist der ganze trick. aufwendige kontrollstrukturen in C schreiben (also alles was in asm keinen spass macht, und aber auch nicht unbedingt besonders schnell sein muss) und ausgewählte teile in asm basteln.