9 c stdin declaration definition standard-library
我在stdio.h中找到了这一行:
extern struct _IO_FILE *stdin;
Run Code Online (Sandbox Code Playgroud)
基于这个'extern'关键字,我认为这只是一个声明.我想知道stdin在哪里定义和初始化?
Jer*_*man 10
它在C库的源代码中定义.通常,您只需要头编译,但你可以找到的源代码,许多开源标准库(如glibc的).
在glibc中,它的定义libio/stdio.c如下:
_IO_FILE *stdin = (FILE *) &_IO_2_1_stdin_;
Run Code Online (Sandbox Code Playgroud)
反过来使用这样的宏来定义libio/stdfiles.c:
DEF_STDFILE(_IO_2_1_stdin_, 0, 0, _IO_NO_WRITES);
Run Code Online (Sandbox Code Playgroud)
DEF_STDFILE宏的定义取决于一些事情,但它或多或少FILE使用文件描述符0(Unix上的标准输入)设置了适当的结构.
定义可能(当然确实)取决于您的C库,当然还有平台.如果需要,可以继续围绕标准库的I/O组件的各个部分进行追逐.
| 归档时间: |
|
| 查看次数: |
7313 次 |
| 最近记录: |