Ich versuche, Funktionsdeklaration mit typedefs zu verstehen.Typedef Funktion vs Funktionszeiger
Was macht dieser Code in C++?
typedef void fcn_t(void);
typedef void (*ptr_t)(void);
fcn_t f;
fcn_t *pf;
ptr_t pf2;
In meinem Verständnis:
fcn_t
ist der Typ einer Funktion, so dass die Linie mitf
ist eine Funktion Erklärung (keine Definition), und ich konnte es später definieren wievoid f(void) { blabla(); bleble(); }
als ob ichvoid f(void);
anstelle vonfcn_t f;
deklariert hätte;fcn_t *
ist der Typ eines Funktionszeigers und die Linie mitpf
ist eine Zeigervariable Definition undpf
ist default-initialisiert (der Codeauszug unter der Annahme von dem globalen Bereich ist);- Es gibt keinen Unterschied zwischen
fcn_t*
undptr_t
, also alles, was ich überpf
gesagt habe, gilt fürpf2
.
Habe ich es richtig gemacht? Hat eine der drei Deklarationen ihre Bedeutung geändert, wenn ich sie als extern
markiert habe? Was würde sich ändern, wenn der Code als C anstatt als C++ kompiliert würde?
wo Sie 'ptr_f' definiert haben? – arboreal84
btw Ich schlage dringend das folgende Tutorial vor: http://www.newty.de/fpt/fpt.html#defi – arboreal84
1. yes, 2. 'pf' wird auf Nullzeiger initialisiert (wenn global), 3. ja 4. Mit 'extern' auf' pf' wäre es eine Deklaration und keine Definition. 5. C und C++ sind in der Regel kompiliert, nicht interpretiert –