为什么stdio.h中的FILE结构是用大写写的?

Dav*_*vid 16 c

为什么FILE结构的名称是stdio.h用大写的?

Edw*_*rak 20

最可能的原因是它曾经是一个#define,而且#define通常都是全部大写.

  • 证明在UNIX 7版本的`stdio.h`中:http://minnie.tuhs.org/cgi-bin/utree.pl?file = V7/usr/include/stdio.h (4认同)
  • 实际上,这是[32d版本的`stdio.h`](https://github.com/dspinellis/unix-history-repo/blob/Bell-Release/usr/include/stdio.h),带有`#定义文件`. (3认同)
  • @ouah Unix和C都早于K&R几年.[Dennis Ritchie的C历史](https://www.bell-labs.com/usr/dmr/www/chist.pdf),虽然没有提到`typedef`,但说最早的便携式I/O包出现在1972年1973年到1980年间,C语言"相当长",因此stdio早于`typedef`是合理的,我们证明`FILE'确实曾经是一个预处理宏. (2认同)

pau*_*sm4 9

总结已经指出的内容:

  1. 大写是C"宏"的惯例.

  2. "FILE"意图是一个"不透明"的结构:你应该使用它,但你不应该"知道"它的内部结构.哪个可以(并且将会)从平台变为平台.

    特别:

http://tigcc.ticalc.org/doc/stdio.html

FILE是流的主要文件控制结构.它的确切结构非常依赖于平台,因此ANSI C建议不应该知道这种结构化类型的确切结构,并且编写良好的程序不需要访问该结构的内部字段.

  1. 正如上面ALK指出,不仅CAN "FILE"被实现为宏,但在Unix7它实际上WAS实现为宏:

    http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/include/stdio.h

V7/usr/include/stdio.h =>

#define BUFSIZ  512
#define _NFILE  20
# ifndef FILE
extern  struct  _iobuf {
    char  *_ptr;
    int   _cnt;
    char  *_base;
    char  _flag;
    char  _file;
} _iob[_NFILE];
# endif
...
#define FILE    struct _iobuf
...
Run Code Online (Sandbox Code Playgroud)