Hallo, Besteht eine Möglichkeit, einen Zeiger auf die Adresse eine Unterprogramm zu setzen ? Gruß Siegfried
Das geht in den meisten Programmiersprachen. In C heißen die Dinger Funktionszeiger. Google kennt sich auch damit aus.
Hallo, habe es so probiert unsigned int *ProzessUpAdresse; ProzessUpAdresse = &FahrstrasseAusfahrenSbhGleis_15(); bekomme "syntax error" Gruß Siegfried
@ Siegfried
1 | unsigned int *ProzessUpAdresse; |
ist kein Zeiger auf eine Funktion, sondern ein Zeiger auf unsigned int. Damit, man den Zeiger richtig deklarieren kann, zeige mal die Deklaration der Funktion
1 | FahrstrasseAusfahrenSbhGleis_15 () |
Nebenbei bemerkt, scheint mir die Nummer am Ende der Funktion auf mögliche Verbesserungen im Design hinzudeuten. Es ist sehr viel Aufwand 15 oder mehr Funktionen zu deklarieren und zu schreiben. Das kann man vermutlich kürzer erledigen.
Hallo, hier die Deklaration der Funktion -> unsigned char FahrstrasseAusfahrenSbhGleis_15(void) <- welch "Verbesserungen im Design" könnte ich machen ? Die Deklaration der Funktion geht von FahrstrasseAusfahrenSbhGleis_11 bis FahrstrasseAusfahrenSbhGleis_15. möchte mal kurz beschreiben, was ich mit dem "Zeiger auf Adresse des Unterprogramm" vorhabe. In der Funktion "FahrstrasseAusfahrenSbhGleis_XX" werden unterschiedlich Abläufe und Anzahl in einen Buffer geladen. Diese Abläufe werden über einen Timer ausgeführt. Sollte jedoch beim laden des Buffers, dieser überlaufen, möchte ich den letzten Auftrag (Unterprogramm) sichern, sodas dieser wenn der Buffer wieder genügend Platz verfügt, nach geladen wird. Gruß Siegfried
Hast du kein C-Lehrbuch? Dort würde nämlich deine Frage beantwortet. Alternativ gibt es auch Anleitungen für C im Web, bspw. diese hier: http://num.math.uni-goettingen.de/Dokumentationen/C/Einfuehrung/index.html Das zweitletze Kapitel interessiert dich: http://num.math.uni-goettingen.de/Dokumentationen/C/Einfuehrung/funktionszeiger.html
>hier die Deklaration der Funktion
1 | unsigned char FahrstrasseAusfahrenSbhGleis_15 (void) |
Dann muss der Zeiger auf die Funktion wie folgt deklariert sein:
1 | unsigned char (* Funktionszeiger)(void); |
Die Zuweisung wäre dann:
1 | Funktionszeiger = & FahrstrasseAusfahrenSbhGleis_15 (); |
Detail dazu findest Du auch im K&R 2. Auflage, Hanser, S. 116
>welch "Verbesserungen im Design" könnte ich machen ?
Auch aufgrund Deiner Beschreibung lässt sich das nicht im Detail
erklären.
Allgemein sollte man generisch behandeln, was in wechselnden
Ausprägungen vorkommt. Du schreibst ja auch keine Funktionen plus_1,
plus_2, plus_3 usw. sondern benutzt den + Operator.
Du sagst ja, das in den Funktionen verschiedene Kombinationen von Daten
in einen Buffer geladen werden. Wenn Du diese Daten selbst in einem
Array oder einer geeigneten Struktur speicherst, die mit der
Fahrstrassennummer indiziert werden, brauchst Du nur eine Funktion mit
der Nummer als Parameter, die dann die Daten in Deinen Buffer lädt.
Hallo, *.h unsigned char FahrstrasseAusfahrenSbhGleis_15 (void) unsigned char (* Funktionszeiger)(void); *.c Funktionszeiger = & FahrstrasseAusfahrenSbhGleis_15 (); leider "E:\UsbPc\UsbPcProzess.c:120:Error: syntax error" Gruß Siegfried
Ja sicher. Weniger ist mehr: Funktionszeiger = FahrstrasseAusfahrenSbhGleis_15;
Hallo, Infos sind klasse, es funktioniert. Habe bereits auch weiter geschrieben. Funktionszeiger = FahrstrasseAusfahrenSbhGleis_15; if (Funktionszeiger() == -1) { AddFahrstrasseError(); } genau, das was ich haben wollte. Vielen Dank an alle. Gruß Siegfried PS. hat hierzu jemand die ISBN Nummer ? K&R 2. Auflage, Hanser, S. 116
ISBN: 3-446-15497-3 Allerdings ist das Buch von 1990 Wahrscheinlich gibt es inzwischen Neuauflagen.
> Allerdings ist das Buch von 1990 Wahrscheinlich gibt es inzwischen > Neuauflagen. Soweit ich weiß, nicht. Eigentlich wäre so langsam eine C99-Auflage fällig. Fast 10 Jahre nach Herausgabe des neuen Standards sinken aber IMHO die Chancen, dass sich die Jungs noch einmal hinsetzen und das Buch auf den neuesten Stand bringen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.