在llvm的stdio.h中哪里可以找到EOF定义?

时间:2018-09-18 10:14:40

标签: c++

我正在研究C ++ I / O文档。

我可以在VC ++的EOF中找到stdio.h的定义,但是在llvm https://github.com/llvm-mirror/libcxx/blob/master/include/stdio.hstdio.h中找不到的定义

enter image description here


顺便说一下,从https://en.cppreference.com/w/cpp/string/char_traits enter image description here

因此,对于charstd::char_traits::eof返回EOF,即-1。同样在https://en.cppreference.com/w/cpp/string/char_traits/eof中,它表示:

  

返回一个不等于char_type类型的有效值的值。

这就是我的推论:-1不是char_type(char)类型的有效值吗?

为什么?在VC ++中,char已签名,因此-1char有效。

1 个答案:

答案 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)