所以我打算到K & r第二版做練習。在做一些練習之後感覺很自信我想我會檢查這些函數的實際實現。那時我的信心逃離了現場。我無法理解它。瞭解ç內置庫函數實現
比如我檢查getchar()
:
這裏是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()'。 –