Forward Declaration von Function Pointern

(Firma: esolutions GmbH) #3074314
Lesenswert?

Hallo,

ich brauche eine Forward Declaration von Function Pointern.

Im Anhang habe ich mal einen hässlichen Workaround gemacht, jedoch würde 
ich gern folgendes machen: (die Header Datei anschauen....)

/*
 * HIER FEHLT die Forward Declaration damit die Function Pointer
 * bekannt sind.
 */

typedef struct
{
  uint16_t adrfunc;
  uint16_t startaddr;
  uint16_t count;
  const uint16_t *timervar;
  const uint16_t triggerval;
  const ModbusTGetData getdata;
  const ModbusCallback callback;
} TModbusDef;


typedef void* (*ModbusTGetData)(TModbusDef *pmdef);
typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode, 
uint8_t count, void *data);

Alles probiert.... Hat da der GCC ein Problem??

Vielen Dank im Voraus!
Jens
Angehängte Dateien:
#3074315
Lesenswert?

typedef struct SModbusDef TModbusDef;

typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode, 
uint8_t count, void *data);

struct SModbusDef
{
  uint16_t adrfunc;
  uint16_t startaddr;
  uint16_t count;
  const uint16_t *timervar;
  const uint16_t triggerval;
  const ModbusTGetData getdata;
  const ModbusCallback callback;
};
Moderator Persönliche Seite #3074596
Lesenswert?

A. K. schrieb:
> typedef struct SModbusDef TModbusDef;
>
> typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode,
> uint8_t count, void *data);
>
> struct SModbusDef
> {
>   uint16_t adrfunc;
>   uint16_t startaddr;
>   uint16_t count;
>   const uint16_t *timervar;
>   const uint16_t triggerval;
>   const ModbusTGetData getdata;
>   const ModbusCallback callback;
> };

Oder auch ganz ohne anfängliches typedef:
1
struct SModbusDef;
2

3
typedef void (*ModbusCallback)(struct SModbusDef *, uint8_t, uint8_t, void *);
4

5
typdef struct SModbusDef
6
{
7
  uint16_t adrfunc;
8
  uint16_t startaddr;
9
  uint16_t count;
10
  const uint16_t *timervar;
11
  const uint16_t triggerval;
12
  const ModbusTGetData getdata;
13
  const ModbusCallback callback;
14
} TModbusDef;
(Firma: esolutions GmbH) #3075976
Lesenswert?

Vielen Dank!!!

Einfach das Problem umdrehen und eine Forward Declaration für den 
struct!
Hab beide Versionen getestet!!! Geht beides!!!

Ich habe versucht eine Forward Declaration des Function Types zu 
finden...
Das sollte ja auch gehen.... Nur wie?

Schöne Grüße und vielen Dank nochmal - Problem ist gelöst, Die Frage nur 
aus akademischen Interesse!

Jens
#3075987
Lesenswert?

Jens R. schrieb:

> Ich habe versucht eine Forward Declaration des Function Types zu
> finden...
> Das sollte ja auch gehen.... Nur wie?

Nope.
Für den Funktionspointer brauchst du die struct. Wenn auch nur in der 
Form: Ja, gibt es.
Also muss die zuerst da sein.
Das reicht dann schon um damit einen Pointer bilden zu können.


> Schöne Grüße und vielen Dank nochmal - Problem ist gelöst, Die Frage nur
> aus akademischen Interesse!

Versuch mal einen typedef zu schreiben für einen Funktionspointer, die 
als Returnwert einen Funktionspointer vom gleichen Typus hat.
Viel Spass!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren