2011-09-08 15 views
12

可能性の重複:
Why is FILE all-caps as in FILE*?標準ライブラリ `FILE`タイプ

なぜ標準ライブラリFILEタイプが書かれている大文字の?
不透明な性質のためですか?

ありがとうございます。

+3

です良いのですか?大まかな時代(例えば 'time_t')のUNIXシステムの型は、組み込みのC型のように小文字である –

+2

キャップのロックキーが壊れていて、期限が短すぎた –

+0

もともとwouldn単純なファイルdエスクリプタは代わりに使用されていますか? (普通の整数であり、組み込みのものは小文字で 'stdin'、' stdout'、 'stderr'です。)' FILE'は、ディスクリプタの使用とファイルハンドルの使用を区別していたかもしれません。 –

答えて

5

、アッパーケースは、一般的にプリプロセッサマクロのために使用されるため、大文字があると思います。私の推測では、もともとは、ライブラリの実装で使用されている具体的な型に拡張されたマクロとして実装されていたということです。

1

これは不透明な型ではなく、通常はC構造体ですが、そのフィールドは実装定義です。

は、私はあなたがCで使用される命名規則を見れば歴史...

+1

私はそれでも、仕様が基本的な型のプロパティやそのようなオブジェクトの内容に関する約束をしない限り、それを "不透明"と呼びます。 –

0

わかりませんが、標準Cライブラリで宣言されているタイプはごくわずかです。おそらくFILEが最初に定義され、* _tスタイルはまだ開発されていませんでした。

それとも原始的なCのバージョンでは、それはマクロだった...彼らはtypedefを発明する前に何が起こったのかと思う:

#define FILE struct __file 

の代わりに:

typedef struct __file FILE; 
+2

'#define'を後方に持っています... –

+0

おっと!修正済み – rodrigo

3

here

から」厳密に言えば、Cでは、FILE型はライブラリ定義型(stdio.hヘッダ内)の別名である(typedefキーワードを参照).File型をそのまま使用する必要はなく、FIL E *(FILEへのポインタ)型。それはC言語の面白いイディオムです。 として通常、FILE型の別名は、ライブラリ定義された構造を意味しますが、直接(それの実装に依存エンティティ)を、そのメンバーを使用していない「

this:。

typedef FILE *stream; 

最後にhere

関連する問題