3

私のシステムでは、次のようにerrno定義されています。

int *    __error(void);
#define errno    (* __error())

errnoはマクロであり、関数に拡張されることを理解してい* __error()ます:

  1. どこでも検索しましたが(システム上のソース)、__error()関数の定義が見つかりません。誰かが関数の定義を表示/説明できますか?

  2. errno = 0は上記の定義(0関数への割り当て?)でどのように機能しますか?errno = 0に拡張し* __error() = 0ますか?

ありがとう

4

1 に答える 1

8

この関数は、呼び出し元のスレッド__errorの変数へのポインターを返します。errnoマクロはそのerrnoポインターを逆参照し、等号の両側に表示される左辺値を生成します。

あなたの質問に答えるには:

  1. errnoこの関数は、その特定のスレッドの変数の正しいアドレスを決定します。各スレッドは独自のものを取得します。

  2. はい、それはそのスレッドの変数(* __error()) = 0;に割り当てるものになります。0errno

于 2012-12-27T01:06:50.360 に答える