ポインターを typedef するのは良い考えですか?

これは、ポインター自体が「ブラック ボックス」、つまり、内部表現がコードと無関係であるべきデータの一部と見なされる場合に適切です。

本質的に、あなたのコードが決して ポインターを逆参照し、それを API 関数に渡すだけで (場合によっては参照によって)、typedef が * の数を減らすだけでなく、 s がコード内にあるだけでなく、ポインターが実際に干渉されるべきではないこともプログラマーに示唆しています。

これにより、必要が生じた場合に将来 API を変更することも容易になります。たとえば、ポインターではなく ID を使用するように変更した場合 (またはその逆の場合)、既存のコードが壊れることはありません。これは、そもそもポインターが逆参照されることが想定されていないためです。


私の経験ではありません。 '* を隠す ' はコードを読みにくくします。


typedef 内でポインターを使用するのは、関数へのポインターを扱うときだけです。

typedef void (*SigCatcher(int, void (*)(int)))(int);

typedef void (*SigCatcher)(int);

SigCatcher old = signal(SIGINT, SIG_IGN);

そうでなければ、役に立つというよりは混乱を招きます。

打ち消された宣言は、signal() へのポインターの正しい型です。 関数であり、シグナルキャッチャーではありません。より明確にすることができます(修正された SigCatcher を使用して 上に入力してください)、次のように記述します。

 typedef SigCatcher (*SignalFunction)(int, SigCatcher);

または、 signal() を宣言するには 関数:

 extern SigCatcher signal(int, SigCatcher);

つまり、SignalFunction 2 つの引数を取る関数へのポインタ (int そして SigCatcher ) を返し、SigCatcher を返します .そして signal() それ自体は 2 つの引数を取る関数です (int そして SigCatcher ) を返し、SigCatcher を返します .