Angepinnt skoe erzählt C in 14 Tagen


    • skoe
    • 35214 Aufrufe 97 Antworten

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

    • Eigentlich bin ich ja da sonst ziemlich gleichgültig, aber ich muss das mal los werden:

      Ganz am Anfang des Kurses habe ich extra darauf hingewiesen, dass ich bestimmte Ungenauigkeiten mit Absicht machen werde, die dem Anfänger die ersten Erfolgserlebnisse besonders unkompliziert bringen. Mir ist klar, dass hier jeder der C kann weiß, dass main int zurückgeben sollte. Wenn ich in den nächsten Tagen Funktionen, Parameter und Rückgabewerte beschrieben hätte, wäre das sich mit in's Programm gekommen.

      Auch ich bin in solchen Sachen ziemlich penibel. Aber man sollte halt wissen an welcher Stelle es weiter bringt und an welche nicht ist nützlich, wenn man was besonders kompakt rüberbringen möchte. Und ich möchte nicht an jeden Satz, der eine Vereinfachung zum Verständnis enthält, einen Disclaimer ranschreiben müssen.

      Trotzdem: Korrekturen bei Fehler müssen sein. Im Zweifelsfall per PN wie es ogd schon gemacht hat.
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Wie wärs mit nem Side-Thread, wo die Experten diskutieren können, bis der Arzt kommt? Dann bleibt dieser hier frei, Anfänger können Verständnisfragen stellen und kriegen sie zufriedenstellend beantwortet und können sich später um die Details kümmern, wenn sie wollen.
    • feuertonne schrieb:

      Wo ein IRQ kommt möchte ich alleine bestimmen.

      Da möchte ich Dich auch beruhigen. Grob gesagt kannst Du in C + ein bisschen Assembler fast alles machen, was Du in reinem Assembler machen kannst. Und auf alle Fälle wesentlich mehr als in BASIC. Wenn man die Werkzeuge ("Toolchain") genau kennt, hat man die Maschine 100% unter Kontrolle.

      Selbst bei der Entwicklung reiner Assembler-Programme können die Tools nützlich sein, das sehen wir später.

      Was genau die IRQ-Vektor-Verbiegerei und der Rest der 900 Bytes machen, wird uns kein Geheimnis mehr sein, wenn wir die Laufzeitumgebung untersuchen. Aber alles zu seiner Zeit.

      Oder hast Du gleich nach dem Schreiben Deines ersten BASIC-Programms damals darüber nachgedacht, was und warum der Interpreter womit macht?
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Ja, der Kernal wird benutzt. Sehe ich gerade im Vice-Monitor.


      ja, weil:
      --> exkurs
      die standardbibliothek "stdio" setzt per definition auf den betriebssystemfunktionen "_open,_close_read,_write" auf (entsprechen in etwa den basic befehlen open,close,get,print). diese sind dankbarerweise auch in für c verhältnisse sehr brauchbarer form im cbm kernal enthalten und können so prima benutzt werden. jede art von i/o geht also wenn die standardfunktionen benutzt werden durch den kernal, mit allen konsequenzen.
      <<--exkurs

      nee, gibt keine warnung ; )


      erschreckend =P

      ...wird das in hello.s ausgegeben, was der Compiler sonst intern weiterverwendet ...


      wen es interessiert der kann/soll an der stelle auch ruhig mal den output mit und ohne optimierungen (-O bzw für alles -Osir) vergleichen. schon bei nur etwas grösseren programmen als dem hello world macht das teilweise krasse unterschiede.

      apropos helloworld, kernal usw:

      die bibliotheken vom cc65 enthalten auch die ursprünglich mal von borland für turbo-c entwickelte "conio.h" welche viele nützliche funktionen für die bildschirm/tastatur ein und ausgabe enthält. unter anderem auch - in der regel kürzere und schnellere - alternativen zu diversen funktionen der "stdio.h". das beispiel von vorhin könnte man auch folgendermassen schreiben und sollte ein etwas kürzeres und schnelleres kompilat rauskriegen:

      Quellcode

      1. #include <conio.h>
      2. void main(void) /* wenn schon falsch dann richtig :) (*) */
      3. {
      4. cputs("Hello world");
      5. }


      (*) beides "void" heisst: "main" nimmt weder parameter entgegen noch gibt es welche zurück, was ja eigentlich genau das ist was wir auf dem c64 für unser hauptprogram haben. (und ja skoe hat natürlich recht: das ist eigentlich und vor allem im moment total wurscht. garnich ignorieren =D)
    • @sauhund: Ich schätze im Normalfall auch Deinen Rat, wie Du sicher schon gemerkt hast, also :bia

      Der Hinweis mit cputs aus conio.h ist gut. An geeigneter Stelle können wir uns ja hier mal die Unterschiede genauer ansehen. Dazu plane ich später die Quelltexte der Bibliotheken und Laufzeitumgebung auseinanderzunehmen. Aber das ist erst sinnvoll, wenn jeder die C-Syntax ansatzweise versteht und weiß was Linker, Header-Files und Bibliotheken sind. Kannst ja inzwischen für die Ungeduldigen wirklich einen Side-Thread aufmachen: "Tiefer in C abtauchen mit sauhund"

      Und warum die conio.h nicht auf jedem C-Compiler eine gute Idee ist, erwähnen wir dann auch mal. Aber nicht alles auf einmal.

      So, dann bis morgen.
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Colt Seavers schrieb:

      Wie wärs mit nem Side-Thread, wo die Experten diskutieren können, bis der Arzt kommt? Dann bleibt dieser hier frei, Anfänger können Verständnisfragen stellen und kriegen sie zufriedenstellend beantwortet und können sich später um die Details kümmern, wenn sie wollen.


      Genau so sollte es laufen :hammer: , Danke @ Colt Seavers. Wenn nicht, geht sonst der "rote Faden" verloren. Also @ ALL EXPERTS, haltet euch bitte :dafuer: zurück :wand und überlaßt bitte, bitte @ skoe die "Moderation", er macht das Klasse.
      Gruß ZX81AMIGA :winke:

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

      Aber nicht alles auf einmal.
      Na. Mir ist alles wurscht. Bin so mehr der "I want it all and I want it now"-Typ. Musste mir Feuertonnes Bemerkung zum IRQ auch arg verkneifen... Falle bei solchen Sachen auch ganz schnell in das "Aber warum, Mami?"-Kleinkindallesaufsaug-Schema zurück ;) Macht also wie ihr denkt. Ich find's auf jeden Fall super :dafuer:
      Dank Dir Skoe, dass Du Dir die Mühe machst!
    • @"Ich-weiß-mehr-Einwerfer": Ich schreibe übrigens fast täglich Shell-Skripte ode Makefiles, die die return-Werte von irgendwelchen Programmen auswerten. Und es kotzt mich an, wenn ich ein Programm verwende, das müllige Rückgabewerte ausspuckt. ICH BIN MIR ALSO BEWUSST (seit ich ca. 15 Jahre alt war), DASS main int ZURÜCKGEBEN MUSS.

      Warum das mit dem "int" so ist, wird auch allen anderen klar werden, wenn ich heute abend den Kurs
      weiterschreibe. Also keine Angst, ich "erziehe" hier keine void-Zurückgeber.

      Mir geht es nicht darum, Diskussionen zu vermeiden, sondern den roten Faden zu erhalten. Wie man oben sieht, ist die "Zielgruppe" der gleichen Meinung. Aber natürlich lerne ich bei dem Kurs auch dazu, weil ich gezwungen bin, etwas genauer hinzusehen und mich mit Dingen zu beschaftigen, die ich sonst ignoriere. Denn die Bluthunde warten nur, der Geifer läuft ihnen aus den Mäulern, sie warten geradezu darauf, dass ich einen Fehler mache und sie mich zerreißen können.

      @Fröhn: Hab übrigens damals auch auf einem A3000 unter RiscOS programmiert, siehe z.B. home.arcor.de/skoe/insanity_e.html (die Texte auf der Seite sind etwas bekloppt, hatte sie damals mit ein paar Bewerungen im Hinterkopf geschrieben)

      @ogd: Danke für die PN, das ist hilfreich, bau ich später mit ein.

      Oh, muss jetzt weg. Grrrr, ist noch dunkel draußen, aber es dämmert langsam.

      Na dann bis heute abend
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • Nur ein kleiner Vorschlag am Rande:

      Wie wär es mit zwei Threads (keine Diskussion jetzt ob Thread, Fred oder Beitrag!!!)?? Einen für den Kurs wo NUR Skoe schreiben soll und einen wo man diskutiert wie hier.


      Der Vorteil wäre, dass der "Kurs" sauber bleibt und für später Einsteigende leichter nach zu vollziehen wäre. Der Kurs wäre sozusagen von dauerhaften / bleibenden Wert.
      Letztlich ist alles nur Illusion
      Es gibt hier nichts von Bedeutung
    • Klingt gut. Heute abend bewege ich die eigentlichen "Lektionen" in das C64-Wiki. Sollten sich später weitere Fehler einschleichen kann ich (oder jemand anderes) es ja dort korrigieren. Und diesen Thread und evtl. andere Threads benutzen wir dann für Fragen und Antworten oder Bluthunds-Diskussionen (tm).

      So, muss jetzt wieder zurück zur Arbeit.
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash
    • skoe schrieb:


      Warum das mit dem "int" so ist, wird auch allen anderen klar werden, wenn ich heute abend den Kurs
      weiterschreibe. Also keine Angst, ich "erziehe" hier keine void-Zurückgeber.

      Erst was Falsches beibringen und dann das Richtige halte ich für keine gute Strategie. Hab genügend Programmierkurse in Büchern gesehen, und als Ergebnis gab es dann viel Schrott auf dem Amiga, der entsprechend irgendwelcher "halb-richtigen" Beispiele programmiert wurde.

      Am gruseligsten fand ich, dass man die Leser darauf drillte, unbedingt OS-Aufrufe zu verwenden aber in den Beispielen dann Speicherbereiche "der Einfachheit halber" an feste Adressen gelegt hat, weil das Allozieren von Speicher gerade nicht zum Thema gehörte. Und schon gab es viele Programme, die entsprechendes auch in freier Wildbahn gemacht haben: Alles mögliche über Libraries, aber Speicher ab $50000 etc. In einer Multitasking-Umgebung ist sowas nicht angenehm.
    • @fröhn: Ooookay, das stimmt. Ich gelobe Besserung und werde ab jetzt von Anfang an auf Qualität achten.

      Hab die Sache mit dem c64-wiki nachmal überdacht: Das definiert sich als Lexikon, weshalb da so ein Kurs nicht ganz richtig aufgehoben ist. Außerdem äußere ich an der einen oder anderen Stelle meine persönliche Meinung, was auch nicht in ein Lexikon gehört.

      Deshalb werde ich den Inhalt auf einen eigenen Server legen und von dort zu den Diskussionen hier verlinken.
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bau Dir ein eigenes Modul! EasyFlash