2011-09-08 74 views
12

可能重复:
Why is FILE all-caps as in FILE*?标准库`FILE`型

为什么标准库FILE类型是大写?
是因为其不透明性?

谢谢。

+3

这是一个好问题。UNIX系统类型是其同时代粗糙(比如:'time_t')有小写的名字,像内置的C型。 –

+2

他们大写锁定键被打破,期限太短。 – 2011-09-08 13:30:43

+0

最初虽然止跌简单的文件d escriptors被用来代替? (平原“醇整数,并且内置了那些小写:'stdin','stdout','stderr')也许'FILE'是用描述符和使用文件句柄来区分。 –

回答

5

如果你看一下在C中使用的命名规则,大写通常用于预处理宏。我的猜测是,它最初是作为扩展到图书馆实现所使用的具体类型的宏来实现的。

1

这不是一个不透明的类型,它通常是一个C结构,但它的领域是实现定义。

我猜大写是因为历史...

+1

我还是把它称为“不透明”只要规范不作任何基础类型的属性,或此类对象的内容的承诺。 –

0

不知道,但要注意,只有在标准C库中声明的几个类型。也许FILE是第一个定义,* _t风格还没有发明出来。

或者,也许在原始版本的ç它是一个宏观......认为他们发明了typedef之前发生了什么:

#define FILE struct __file 

相反的:

typedef struct __file FILE; 
+2

你有你'#define'向后... –

+0

哎呀!更正 – rodrigo

3

here

“严格地说,在C的文件类型是限定的文库(在stdio.h头)类型别名(typedef关键字),没有必要使用文件类型作为这样,仅FIL E *(指向FILE)类型。它是C语言中有趣的成语之一。 由于通常,文件类型别名表示库中定义的结构,但不其成员直接使用(它的实现依赖实体)“

而且this

typedef FILE *stream; 

最后here