Он определен в исходном коде вашей библиотеки C. Обычно вам нужны заголовки для компиляции, но вы можете найти исходный код для многих стандартных библиотек с открытым исходным кодом (например, glibc).
В Glibc, это определено в libio/stdio.c
, как например:
_IO_FILE *stdin = (FILE *) &_IO_2_1_stdin_;
который в свою очередь определяется с помощью макроса в libio/stdfiles.c
так:
DEF_STDFILE(_IO_2_1_stdin_, 0, 0, _IO_NO_WRITES);
Определение DEF_STDFILE
макро варьируется в зависимости на нескольких вещах, но он более или менее устанавливает подходящую структуру FILE
, используя дескриптор файла 0
(который является стандартным входом в Unix).
Определение может (и конечно же) варьироваться в зависимости от вашей библиотеки C и, конечно же, от платформы. Если вы хотите, вы можете продолжить погоню за гусями вокруг различных частей компонента ввода-вывода вашей стандартной библиотеки.
Почему это запрещено? – Alan