Zeiger auf Adresse des Unterprogramm

Gast
@ 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.
OP
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
Gast
>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.
OP
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
Gast
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.