Vì vậy, tôi đã trải qua K & Phiên bản thứ hai của R đang thực hiện các bài tập. Cảm thấy khá tự tin sau khi thực hiện một số bài tập, tôi nghĩ tôi sẽ kiểm tra việc triển khai thực tế các chức năng này. Đó là sau đó sự tự tin của tôi chạy trốn khỏi hiện trường. Tôi không thể hiểu được nó.Hiểu C cài đặt chức năng thư viện cài sẵn
Ví dụ tôi kiểm tra getchar()
:
Đây là nguyên mẫu trong libio/stdio.h
extern int getchar (void);
Vì vậy, tôi theo nó qua nó và nhận được này:
__STDIO_INLINE int
getchar (void)
{
return _IO_getc (stdin);
}
Một lần nữa tôi theo nó đến số 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;
}
Và tôi đưa đến một tập tin tiêu đề libio/libio.h
, mà là khá khó hiểu:
#define _IO_getc_unlocked(_fp) \
(_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
Đó là nơi tôi cuối cùng đã kết thúc cuộc hành trình của tôi.
Câu hỏi của tôi khá rộng. Tất cả điều này có nghĩa là gì? Tôi không thể cho cuộc sống của tôi tìm ra bất cứ điều gì hợp lý ra khỏi nó bằng cách nhìn vào mã. Có vẻ như một loạt các mã đã trừu tượng hóa các lớp sau lớp.
Quan trọng hơn khi nó thực sự có được những nhân vật từ stdin
nó đọc nhân vật khi nó gọi '__uflow() '. –