已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。
13天前关闭
Improve this question的
在C编程中,FILE
是什么?数据类型、预处理器指令还是数据类型?
我运行一个简单的程序,把它当作一个数据类型来查找它的大小,在一个在线编译器中我得到216字节,在turbo C中我得到16字节,这使得它像一个long double
数据类型。
对此有什么解释吗?
已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。
13天前关闭
Improve this question的
在C编程中,FILE
是什么?数据类型、预处理器指令还是数据类型?
我运行一个简单的程序,把它当作一个数据类型来查找它的大小,在一个在线编译器中我得到216字节,在turbo C中我得到16字节,这使得它像一个long double
数据类型。
对此有什么解释吗?
1条答案
按热度按时间uttx8gqw1#
C标准对
FILE
的定义如下:7.23输入/输出 <stdio.h>
7.23.1引言
1头文件
<stdio.h>
定义了几个宏,并声明了三种类型和许多用于执行输入和输出的函数。[...]
声明的类型是
size_t
(在7.21中描述);字符串
它是一种对象类型,能够记录控制流所需的所有信息,包括其文件位置指示符,指向其相关缓冲区的指针(如果有的话),记录是否发生读/写错误的错误指示符,以及记录是否到达文件结尾的文件结尾指示符; [...]
所以
FILE
被定义为<stdio.h>
中的一个类型。这个类型可能是在头文件中完全定义的完整类型,也可能是一个不完整的类型,比如typedef struct FILE FILE;
。所以它的大小甚至可能无法通过sizeof(FILE)
获得,并且在任何情况下,它是实现定义的,并且不能从FILE
的值推断出关于其实现的任何东西。FILE
可以是标量类型,例如整数类型,指针类型,对于只操作FILE *
对象的用户程序来说,这并不重要,无论是默认流stdin
,stdout
和stderr
,还是由标准库函数fopen()
,freopen()
,tmpfile()
等返回的流。如果您对实现细节感兴趣,请在Internet上查找可用的开源C库,最好是简单的C库,如newlib或musl C库。