[C] Dziwne użycie typedef


(McDracullo) #1

Podczas przeglądania kodu wygenerowanego przez Real Time Workshop (z Pakietu Matlab/Simulink) natrafiłem na takie cudo:

typedef int_T (*_ResolveVarFcn)( const SimStruct *S, const char *, mxArray **);

nie za bardzo rozumiem o co chodzi w tym fragmencie kodu. Moglibyście wytłumaczyć mi co dokładnie robi ta linijka kodu? :slight_smile:


(Witos) #2

definiuje typ _ResolveVarFcn jako wskaźnik na funkcję zwracającą typ int_T i przyjmującą parametry: const SimStruct *, const char *, mxArray **

czyli potem można robic cos takiego:

typedef int_T (*_ResolveVarFcn)( const SimStruct *S, const char *, mxArray **);


int_T moja_funkcja( const SimStruct *S, const char *c, mxArray **a) 

{ 

        //cialo funkcji 

}


// to w main albo innej funckji


_ResolveVarFcn fptr = &moja_funkcja;


int_T result = fptr( /* tu argumenty */);

(McDracullo) #3

Czy potrzebny jest ten nawias?

(*_ResolveVarFcn)

Chodzi mi o sam nawias, czy nie można zastąpić tego po prostu tym

*_ResolveVarFcn

(Juszczyk Pawel) #4

Tak, to wskaźnik na funkcję, a nie na zmienną


(McDracullo) #5

Aha, czyli zawsze wskaźnik na funkcję bierze się w nawias? Nie wiedziałem :slight_smile: Wielkie dzięki :slight_smile:


(Juszczyk Pawel) #6

dokładnie ujmując składnia wskaźników do funkcji / metod

typ_zwracanej_wartości (*nazwa_wskaznika)(lista typów argumentów fukcji)

Tak jak słusznie zauważyłeś wskaźniki do funkcji umieszcza się w nawiasie, ale musisz jeszcze dodać typ zwracaj wartości i listę typów argumentów.