2011-09-08 185 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