我正在研究C ++ I / O文档。
我可以在VC ++的EOF
中找到stdio.h
的定义,但是在llvm https://github.com/llvm-mirror/libcxx/blob/master/include/stdio.h的stdio.h
中找不到的定义
顺便说一下,从https://en.cppreference.com/w/cpp/string/char_traits
因此,对于char
,std::char_traits::eof
返回EOF
,即-1
。同样在https://en.cppreference.com/w/cpp/string/char_traits/eof中,它表示:
返回一个不等于char_type类型的有效值的值。
这就是我的推论:-1
不是char_type(char
)类型的有效值吗?
为什么?在VC ++中,char
已签名,因此-1
对char
有效。
答案 0 :(得分:1)
您提到的文件https://github.com/llvm-mirror/libcxx/blob/master/include/stdio.h使用此行从C库中获取EOF:
#include_next <stdio.h>
LLVM不提供C库,因此它将随您系统上的内容而变化。例如,在Linux上,通常是GNU libc,它定义了EOF here
/* The value returned by fgetc and similar functions to indicate the
end of the file. */
#define EOF (-1)