Hi, ich versuche ein bisschen C zu lernen.
Wie kann ich die push und pop Befehle in C nachbilden?
Meine Idee:
Unsigned long int stack[50];
Unsigned char stackpointer = 0;
Stack[stackpointer++] = Bla; // push(Bla)
Bluber = stack[--stackpointer]; // pop(Bluber)
Aber wie kann ich mit #define das so schreiben :
Push(bla)
Pop(Bluber)
also das ich die Original Asssembler-Syntax habe?
maddel ihm sein kumpel schrieb:> Wie kann ich die push und pop Befehle in C nachbilden?
wozu?
man schreibt ja C damit man sich nicht damit beschäftigen muss.
Du wirst aber mindestens noch ein Funktion benötigen, die prüft, ob der
Stack leer ist und irgendwie sicher stellen, dass der Stack nicht
überläuft, was wiederum erfordert, dass Du wohl auch die Stackgröße
irgendwo wirst mitführen müssen.
PS: Aller Code ist ungetestet!
maddel ihm sein kumpel schrieb:> Wie kann ich die push und pop Befehle in C nachbilden?
Für was brauchst Du das in C?
Der Compiler macht das für Dich! C ist ein sog. Hochsprache.
Du stellst eine Frage, die Müll ist. Denn Du hast noch nicht verstanden,
warum man in einer Hochsprache progammiert.
Deine Frage ist unlogisch!
Tja BattMan,
dann erkläre mir doch mal bei all deinem allwissen, warum .net eine
queue mitbringt. dein gesülze ist unlogisch. ein stack verliert absolut
nicht seine berechtigung bei der vernwendung einer hochsprache.
Auch wenn es schon Klassen und Templates gibt: es ist immer gut auch die
Grundlagen davon zu wissen. Von daher ist eine eigene Implementation zu
Lernzwecken eine gute Sache. Einmal gemacht. Verstanden wie es geht. Und
dann die vorgefertigten Teile weiter benutzt.
An Maddel: vergiss Makros. Das verwirrt Anfänger und führt nur zu
Problemen.
Basis in C sind die Funktionen. Schreib saubere Funktionen jeweils für
Push und Pop. Dann spielt mal damit. Debugausgaben rein. Und auch mal
schauen was passiert, wenn man zuviel pusht/popt und wie man das
abfängt.
A. H. schrieb:> Tu's in eine struct und mach Funktionen:
Ganz ehrlich, ich denke deine Antwort ist für jemanden, der im C-Buch
noch nicht mal bis zu Kapitel "Funktionen" gelesen hat, leicht
over-engineered.
Oliver
zur ursprünglichen frage:
@ maddel ihm sein kumpel
schaut doch ganz gut aus!
anstatt das ganze in ein makro zu packen, schau dir mal inline
funktionen an. der compiler macht effektiv das gleiche daraus, der code
ist aber sauberer
Oliver S. schrieb:> A. H. schrieb:>> Tu's in eine struct und mach Funktionen:>> Ganz ehrlich, ich denke deine Antwort ist für jemanden, der im C-Buch> noch nicht mal bis zu Kapitel "Funktionen" gelesen hat, leicht> over-engineered.
Die einzige Konsequenz fuer den TO kann dann aber nur sein, nach den
bisher gelesenen 20 Seiten auch die restlichen 250 Seiten mal in Angriff
zu nehmen.
Oliver S. schrieb:> A. H. schrieb:>> Tu's in eine struct und mach Funktionen:>> Ganz ehrlich, ich denke deine Antwort ist für jemanden, der im C-Buch> noch nicht mal bis zu Kapitel "Funktionen" gelesen hat, leicht> over-engineered.
Und wenn man bis "Aliasing" gelesen hat, wird man den Code in die Tonne
treten weil er falsch ist.
Johann L. schrieb:> Und wenn man bis "Aliasing" gelesen hat, wird man den Code in die Tonne> treten weil er falsch ist.
Was genau siehst Du denn für Probleme mit aliasing und, vor allem, wie
würdest Du sie lösen?
Peter Zz schrieb:> ich würde das so machen:
Ich nicht, und vermutlich auch kaum sonst jemand.
Macht aber nichts, da der TO vor Schreck schon lange das Weite gesucht
hat, und mit all den hier genannten Lösungsvorschlägen eh nichts
anfangen kann.
Denn seine Frage war ja nicht nach stack und push und pop, sondern: Wie
schreibe ich eine Funktion in C, und wie rufe ich die auf, was ist das
alles überhaupt, und überhaupt überhaupt ?
Oliver
Oliver S. schrieb:> A. H. schrieb:>> Tu's in eine struct und mach Funktionen:>> Ganz ehrlich, ich denke deine Antwort ist für jemanden, der im C-Buch> noch nicht mal bis zu Kapitel "Funktionen" gelesen hat, leicht> over-engineered.>> Oliver
Ich weiß, es mag auch etwas gemein sein, ist aber ein Stück weit auch
Methode: Man muss ja immer auch mit Leuten rechnen, die hier einfach nur
ein paar Dumme suchen, um billig ihre Hausaufgaben gemacht zu bekommen.
Deshalb versuche ich ganz bewusst meine Antworten immer ein Stück
anspruchsvoller zu gestalten, als es für die Lösung der Aufgabe
eigentlich notwendig wäre. Jemand, der wirklich am Lernen interessiert
ist, wird das hoffentlich als willkommene Anregung verstehen. Jemand,
der nur eigene Anstrengung vermeiden möchte, dürfte mit der Lösung
dagegen nicht glücklich werden (und wird hoffentlich nicht dumm genug
sein, eine Lösung, die er nicht wirklich versteht als seine eigenen zu
verkaufen).
über die Frage des TO können wir uns wohl hier zu Tode spekulieren, es
fehlen einfach paar Hintergrundinformationen, warum wieso weshalb...
Maddel: nimm dir die Zeit und lies mal hier rein:
http://www.c-howto.de/
Mich hats auch gehelft ;-)