www.mikrocontroller.net

Forum: Compiler & IDEs Funktionspointer in Struktur


Autor: Mattias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich einen Funktionspointer in einer Struktur vereinbaren? Wenn
ich folgendes vereinbare
typedef struct
{
  uint16_t period;
  uint8_t  offset;
  void *function(void);
}
OS_TASKS;
bekomme ich folgende Fehlermeldung:
../os.h:37: error: field `function' declared as a function
Das ganze soll auf einem ATMEGA48 laufen.
Sorry für den kurzen Sourcecode im Text.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein Funktionspointer was du da hast.

typedef struct
{
  uint16_t period;
  uint8_t  offset;
  void (*function)(void);
}
OS_TASKS;

Jetzt ist es einer.

Autor: Mattias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

danke für den Tipp! Ist das GCC-spezifisch? Bei anderen Compilern
konnte ich bis jetzt die Klammern weglassen. Außerhalb der
Strukturdefinition hat der Compiler nicht gemeckert.
Danke nochmals!

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, 'void *' ist kein Funktionszeiger, sondern ein nicht näher
spezifizierter Zeiger. <type> (*<func>)(<param>) dagegen ein
Funktionszeiger.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nö, 'void *' ist kein Funktionszeiger, sondern ein nicht
> näher spezifizierter Zeiger.

Das stimmt zwar, aber in der struct von Mattias ist eine Funktion ohne
Parameter, die void* zurückgibt, deklariert.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das stimmt zwar, aber in der struct von Mattias ist eine Funktion
> ohne Parameter, die void* zurückgibt, deklariert.

In einem C++-Kontext wäre das eine gültige Deklaration (damit wird
dann eine Methode zu dieser Klasse deklariert).  Damit ist es zwar
syntaktisch richtig, aber semantisch natürlich etwas völlig anderes.

In einem C-Kontext ist es selbst syntaktisch falsch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.