。いくつかのエクササイズをした後にかなり自信が持てると感じましたが、私はこれらの機能の実際の実装をチェックすると思っていました。それは私の自信だった。私はそれを理解できませんでした。私はgetchar()
をチェック例えばの理解Cビルトインだから私は練習をやってK & R第二版を通過したライブラリ機能の実装
:
ここでは、だから私はそれを介してそれに従うと、これを取得しますlibio/stdio.h
extern int getchar (void);
でプロトタイプです:
再び__STDIO_INLINE int
getchar (void)
{
return _IO_getc (stdin);
}
私はそれに従いますlibio/getc.c
:
int
_IO_getc (fp)
FILE *fp;
{
int result;
CHECK_FILE (fp, EOF);
_IO_acquire_lock (fp);
result = _IO_getc_unlocked (fp);
_IO_release_lock (fp);
return result;
}
そして、私はかなり不可解である別のヘッダファイルlibio/libio.h
に取られています:
#define _IO_getc_unlocked(_fp) \
(_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
。
私の質問はかなり広いです。これはどういう意味ですか?私の人生は、コードを見て論理的に何かを理解することができませんでした。レイヤーの後にレイヤーを抽象化したコードの束のように見えます。
さらに重要なのはそれが本当にstdin
が '__uflow()'を呼び出したときに文字を読み取ります。 –