Start z oświadczeniem o f1
:
int (*f1)(float);
Chcesz f2
jako wskaźnik do funkcji powracającego f1
, więc zastąpił f1
w zgłoszeniu powyżej deklaracji dla f2
:
int (* f1 )(float);
|
+-----+-----+
| |
v v
int (*(*f2)(double))(float);
Deklaracja jest oznaczana jako
f2 -- f2
*f2 -- is a pointer
(*f2)( ) -- to a function
(*f2)(double) -- taking a double parameter
*(*f2)(double) -- returning a pointer
(*(*f2)(double))( ) -- to a function
(*(*f2)(double))(float) -- taking a float parameter
int (*(*f2)(double))(float) -- returning int
powtórzyć proces f3
:
int (*(* f2 )(double))(float);
|
+---+----+
| |
v v
int (*(*(*f3)(int))(double))(float);
który brzmi
f3 -- f3
*f3 -- is a pointer
(*f3)( ) -- to a function
(*f3)(int) -- taking an int parameter
*(*f3)(int) -- returning a pointer
(*(*f3)(int))( ) -- to a function
(*(*f3)(int))(double) -- taking a double parameter
*(*(*f3)(int))(double) -- returning a pointer
(*(*(*f3)(int))(double))( ) -- to a function
(*(*(*f3)(int))(double))(float) -- taking a float parameter
int (*(*(*f3)(int))(double))(float); -- returning int
C lub C++? Ponieważ C++ ma kilka łatwiejszych sposobów wyrażania takich rzeczy. – Puppy
[cdecl jest twoim przyjacielem] (http://cdecl.ridiculousfish.com/?q=declare+f3+as+pointer+do+funkcji+%28int%29+returning++pointer+do+funkcji+%28double%29+ return + wskaźnik + do + function +% 28float% 29 + return + int) –
cdecl.org tłumaczy tylko z c-składni na angielski. Nie jest to zbyt użyteczne, gdy idziesz w drugą stronę, ponieważ musisz sformułować swoją deklarację idealnie w oczekiwanej formie, a nie w ten sposób działa język angielski czy jakikolwiek inny język naturalny. –