2015-08-18 8 views
6

Dla robi typedef dla wskaźnika funkcji, robimy coś takiego,Czy istnieje alternatywna składnia do wskaźników funkcji typedef?

typedef int (*func) (char*); 
typedef struct{ 
    char * name; 
    func f1; 
} 

W przeciwieństwie do tego, natknąłem się na kod, którego nie rozumiem.

typedef int rl_icpfunc_t (char *); 
typedef struct { 
    char *name;   /* User printable name of the function. */ 
    rl_icpfunc_t *func; /* Function to call to do the job. */ 
    char *doc;   /* Documentation for this function. */ 
}COMMAND; 

To jest fragment kodu z przykładu biblioteki libedit. Czy ktoś może mi to wyjaśnić?

+0

Jest to funkcja int, która pobiera parametr char *. – cup

Odpowiedz

7
typedef int rl_icpfunc_t (char *); 

jest zdefiniowanie prototyp funkcjonować jako typ.

rl_icpfunc_t * func; 

definiuje func jako wskaźnik do pierwszego.

to, w przeciwieństwie do określenia typu wskaźnik funkcji bezpośrednio przez:

typedef int (*prl_icpfunc_t) (char *); 
prl_icpfunc_t func; 

Rezultatem obu approches jest taki sam: Wskaźnik func, co wskazuje na funkcję powrotu int i biorąc jeden argument, czyli a char*.

+0

Czy możesz wyjaśnić nieco więcej? Czy mówisz, że drugi scenariusz to sytuacja błędu? – Ankit

+0

@Ankit: Oba podejścia do zdefiniowania wskaźnika funkcji są prawidłowe. – alk

+0

@Ankit: Zobacz moją zaktualizowaną odpowiedź. – alk

3

Czy to jest prawidłowe użycie typedef int rl_icpfunc_t (char *);?

Tak, to oznacza, że ​​rl_icpfunc_t jest funkcją, która pobiera wskaźnik do znaku char i return oraz int. Można użyć rt_icpfunct_t zamiast normalnego typu, co oznacza, że ​​funcrl_icpfunc_t *func jest wskaźnik do funkcji typu rt_icpfunct_t

+0

Różnica polega na tym, że w drugim scenariuszu podczas wykonywania typedef używany jest rl_icpfunc_t zamiast (* rl_icpfunc_t). A następnie jest używany jako rl_icpfunc_t * func, a nie rl_icpfunc_t func. Tutaj są moje wątpliwości. Czy to jest dozwolone? Czy to oznacza coś innego? – Ankit

+0

Co nie jest dla ciebie jasne? Wskaźnik funkcji zadeklarowany wewnątrz struktury 'COMMAND'? – artm

+0

tak mam na myśli zapytać czy to jest poprawne używać ** typedef int rl_icpfunc_t (char *); **? – Ankit

Powiązane problemy