Beiträge von next_i im Thema „C: Emulation von Klassen“

    strik: Ok, bin Deine Hinweise durchgegangen:

    1. Kein "void" in "int main(void) {}": Na gut, habe "void" jeweils eingefügt. gcc meckert aber auch nicht, wenn es fehlt.

    2. Whitespace Zeichen: Ja gut, die werden dann halt "in der Regel" ignoriert, nicht "immer". An der Stelle auf alle Ausnahmen einzugehen, würde den Leser nur verwirren.

    3. "int" ist immer "signed int", "char": Danke für die Hinweise, das sind die Informationen, die ich brauche, um mit C weiterzukommen.

    4. Präprozessor-Anweisungen: Tja, da kenne ich mich halt noch nicht so aus, weil ich Programme, die so groß sind, daß sie sie brauchen, noch nicht geschrieben hab'.

    Ich kann noch nichtmal Deine Kritik überprüfen, daher lasse ich an der Stelle den Text erstmal so wie er ist.

    5. "Bitte melde dich an, um diesen Link zu sehen." mit Anführungszeichen sucht auch in den Standardpfaden: Ah, wußte ich nicht. Wieder was gelernt.

    6. "const" verhält sich komisch: Mag sein.

    7. Dafür, daß man manchmal Variablen erst initialisieren, und später deklarieren muß, ist der Sprachstandard verantwortlich (kein C99), nicht der Compiler: Ok.

    8. for-Beispiele ungünstig: Sehe ich nicht so. An "for 0 bis 9" will ich den Leser erst heranführen, und hole ihn erstmal bei seinem natürlichen Empfinden "for 1 bis 10" ab.

    Mein Beispiel zeigt klar, was "continue" und "break" machen.

    Die Frage ist, was wolltest Du mit so einem Posting bewirken? Das Niveau meines Textes auf das eines amtlichen Lehrbuchs anheben?

    Mir helfen, C besser zu verstehen?

    Oder nur mal damit angeben, daß Du alles besser weißt?

    Dann schreib' doch selbst ein Lehrbuch!

    Wie gesagt hab' ich mehrere gelesen, aber C verhält sich mir gegenüber immer noch wie 'ne Bitch. :)

    Man bräuchte ein Buch, in dem das wirklich erklärt wird. Das war ja auch der Zweck meiner Seite, aber es ist richtig, daß ich mich selbst nicht gut genug damit auskenne, um das wirklich auf Lehrbuchniveau aufzuschreiben. Das müßte halt ein studierter Informatiker machen, der selbst schon viele große C-Projekte umgesetzt hat.

    Aber vielleicht ist es ja mit C so , wie Laotse schon 500 v.Chr. gesagt hatte:

    Zitat von Laotse

    Der, der redet, weiß nicht. Der, der weiß, redet nicht.

    Ich habe mir den Text nur auszugsweise angeschaut, da schlummern bestimmt noch ein Haufen weiterer Probleme.

    Absolut. Das sind meine Notizen, die meinen aktuellen Kenntnisstand widergeben - der sicher nicht perfekt ist. Das ist ein sich ständig wandelnder Text (meinetwegen z.B. so wie Wikipedia), an dem ich primär für mich selbst schreibe. Wenn ich was dazulerne, pflege ich es jeweils in den Text ein, und dann wird er dadurch vielleicht besser.

    In den nächsten Tagen gehe ich also Deine detaillierten Einwände durch, überprüfe, ob an ihnen was dran ist, und wenn es mir plausibel erscheint, ändere ich den Text.

    Mal sehen, inwieweit ich Lust dazu hab'. Vielleicht geh' ich auch angeln.

    Du kannst ja mal von deinen Erfahrungen berichten, wenn du das erste Projekt programmiert hast.

    Das will ich gerne tun. Bisher hab' ich aber noch keine nennenswerten C-Projekte, weil es mir wie gesagt schwerfällt, damit zurechtzukommen. In Python sieht's besser aus, da hab' ich gerade Bitte melde dich an, um diesen Link zu sehen. hochgeladen.

    Aber wie gesagt, wenn mir was in C gelingen sollte, sag' ich Bescheid. ;)

    Es gibt uebrigens auch unzaehlige C-Libs, die diesem Paradigma folgen. Ist also nix ungewoehnliches und auch keine neue Entdeckung.

    Das ist richtig, aber in meinen Büchern zu C einschließlich K&R hab' ich's nicht gefunden. Deshalb war es für mich ein "Aha"-Erlebnis.

    Oder im "Bitte melde dich an, um diesen Link zu sehen.": Steht das da?

    Ich sehe es nicht. Warum schreibt man das da nicht rein?

    Man kann das alles machen, aber wozu?

    Weil man mit z88dk und CC65 leistungsfähige C-Cross-Compiler für ZX Spectrum und C64/Atari800/Commander X16 hat.

    Ob es dafür C++-Cross-Compiler gibt, weiß ich nicht.

    Außerdem ist mir persönlich C++ bisher nicht so sympathisch.

    Ich würde gern lieber in C schreiben. Aber die Möglichkeit, solche Pseudo-Objekte mit all den Daten und Methoden "darin", in ihrer Gesamtheit an Funktionen zu übergeben und diese dort auf einfache Weise weiterzuverarbeiten, erscheint mir außerordentlich nützlich.

    In meinen Programmen hab' ich vor allem diese OOP-Grundfunktionalität verwendet. Vererbung und Polymorphismus dagegen nur sehr selten. Die sind mir daher nicht so wichtig.

    Was Diddl beschrieben hat, hatte ich in meinem Beispielprogramm auch schon zum großen Teil berücksichtigt.

    Da mir diese OOP-Grundfunktionalität aus Python-Programmen bereits sehr geläufig ist, würde sie meine C-Programme für mich selbst auch nicht verkomplizieren. Im Gegenteil: Der Zugriff auf solche "Pseudo-Objekte" wird Vieles sehr viel einfacher machen.

    Das könnte gerade die Art von Vereinfachung sein, die ich beim Schreiben von C-Programmen brauche, so daß ich die Hoffnung habe, dadurch mit C endlich mal voranzukommen.

    Du verwendest in dem verlinkten Demo self. Das gibt es doch in C gar nicht, sondern nur in C++. Oder hat sich das in den letzten 20 Jahren geändert?

    Naja, ich hab's halt mit diesem Namen definiert. Weil mir auffiel, daß es ziemlich genau das macht, was in Python oder Perl (die kenne ich besser als C++) das "self" auch macht. So kann man statt in Python "self.name" eben schreiben "self->name".

    In dem C-Beispiel ist es genaugenommen ein Zeiger auf das struct, das die "Attribute" hält (in Perl ist es eine Referenz auf einen anonymen Hash, der ebenfalls die Attribute hält). Aber das, was das "self" eigentlich ist, braucht einen ja nicht mehr zu kümmern.

    Man schreibt nur einfach "self->name", wenn man den Wert des Attributs haben will. Das ist der Witz an OOP.

    Geht wie gezeigt in C sogar mit ganzen Strings. Die sind in C sonst ja immer ein Problem.

    Hi,

    hab' was über C entdeckt, das ich sehr interessant finde, weil es mir ggf. das Leben damit erheblich erleichtern kann: Offenbar ist es möglich, mit Hilfe von structs und Funktionen sowas wie Klassen zu emulieren.

    Das Konzept von Klassen hab' ich unter Python gelernt, dazu verwende ich immer das folgende kleine Programm:

    Der Witz ist nun, daß man das relativ ähnlich auch in C schreiben kann. Hab' Bitte melde dich an, um diesen Link zu sehen. ein Beispiel gepostet.

    Der Code kompiliert/läuft sowohl mit gcc/Linux, als auch mit z88dk/Spectrum, CC65/"Commander X16", CC65/C64.

    Ich denke, das könnte endlich Vieles erheblich einfacher machen, was C angeht, und finde das daher ehrlich gesagt ziemlich aufregend.