C文件指针,为什么不直接使用文件类型呢?

C文件指针,为什么不直接使用文件类型呢?,c,file,pointers,C,File,Pointers,我知道在C语言中,我们必须声明一个指向文件类型的指针。为什么我们不能直接使用文件类型,而不必使用指向文件的指针 FILE *file; FILE file; // Why can't we use this instead? 文件是一种资源。给定的文件只存在一次,不能四处移动。这使得文件不适合C的值语义。每当您有一个资源时,您就通过传递一个指向该资源的指针来引用该资源,这就是C API所做的 (此外,文件的定义对于实现来说是私有的,而不是标准的一部分,这是您希望实现者拥有的一项基本自由。)C最

我知道在C语言中,我们必须声明一个指向文件类型的指针。为什么我们不能直接使用文件类型,而不必使用指向文件的指针

FILE *file;
FILE file; // Why can't we use this instead?
文件是一种资源。给定的文件只存在一次,不能四处移动。这使得
文件
不适合C的值语义。每当您有一个资源时,您就通过传递一个指向该资源的指针来引用该资源,这就是C API所做的


(此外,
文件
的定义对于实现来说是私有的,而不是标准的一部分,这是您希望实现者拥有的一项基本自由。)

C最初不具备按值传递结构的能力,这是在ANSI C89中添加的

文件
在K&R C中不起作用。由于
文件*
工作正常,因此在起草ANSI C时,没有必要或没有好处重新设计与
文件
一起工作的函数,而不是
文件*

正如Kerrek SB所指出的,
FILE*
的另一个好处是
FILE
可以是一个类型定义的结构标记,这使得实现可以自由地以任何最好的方式实现它,而不会中断任何工作程序。

注意,C11(n1570)7.21.1 p2要求
FILE
成为(完整的)“对象类型”,so
文件
是有效的,但据我所知,完全没有用(我认为,唯一可以移植的方法是将其归零)。