stdin
- это макрос, который расширяется до выражения типа FILE *
(так, да, это указатель). Его значение не указано, но требуется указать конкретный объект, поэтому он определенно не является NULL.
0
- целочисленная константа, которая преобразуется в указатель NULL при использовании в контексте указателя. Из этого следует, что stdin != 0
.
STDIN
не определяется стандартной библиотекой C.
Вы, возможно, слышали о том, что на уровне ОС дескриптор файла, соответствующий stdin
имеет значение 0, которое является истинным, но дескрипторы и FILE
объекты не то же самое, и они не могут быть использованы как взаимозаменяемые. (Если вы находитесь в системе Unixy, прочитайте /usr/include/stdio.h
где-то. Это «просто» больше C. Обычно существует конкретное определение объекта FILE
, как довольно сложного struct
, хотя это стандарт не требуется.)
** man 3 stdin **: 'extern FILE * stdin;' –
Вы также получили предупреждение компилятора, что вы полностью проигнорировали. Не делай этого. –
Спасибо Тим. Пройдя через страницы руководства – Angus