2011-02-05 54 views
0

我想要一個C的頭文件列表,這些文件不需要使用它們。是否有必要在C中編寫這些頭文件?

實施例:

scanf(), printf(),.... etc. //can be use without stdio.h 
getch()...etc. //can be used without conio.h 

是是必要的,而我使用這些(上文)方法寫入這些頭(stdio.h中,CONIO.H)?

+0

幾乎所有庫函數或API或系統調用的文檔都會聲明您需要包含哪個.h文件爲了它。 – 2011-02-05 17:27:27

+0

是的,這是必要的。當你使用他們定義的函數時,你是否有一個特別的原因要避免包含標準頭文件? – 2011-02-05 17:39:20

回答

0

基本上可以使用任何C函數不具有報頭。標題包含這些功能的原型,可以警告錯誤的類型或參數數量。

所以是的,你可以做到沒有這些標題。

但是你不應該這樣做。

但通常你不寫這些頭,這些都是由構建環境提供的。

因爲這些檢查只是警告在C中的另一件事你應該打開這些警告並將它們視爲錯誤。否則,你會遇到非常糟糕的C經驗。

在gcc中,你應該總是使用選項-W -Wall運行,並避免這些給出的所有警告。

順便提一句,這些不是方法,而是功能。

附錄:既然你是要去所有警告視爲錯誤,你可能會打開-Werror果然所有警告變爲錯誤只是執行此操作。

就我個人而言,我並沒有使用這個選項,但有紀律清除所有警告。這使得可以忽略一段時間的警告,並且在我承諾進行版本控制之前通常會進行清理。

但是,當然對於羣體來說,通過例如-Werror來強制執行此操作是有意義的。在允許提交之前運行測試腳本。

4

使用沒有原型的函數已被當前標準C99棄用,並且可能會在下一版本中刪除。這是一個很好的理由。這種用法很容易出錯,並導致難以追蹤故障。不要這樣做。

1

在當前的C語言標準中,函數聲明(但不是原型)是強制性的,並且原型對於可變參數函數如printf一直是強制性的。但是,您不需要包含標題;只要您有可用的必需類型,就可以自行聲明/設計函數的原型。例如,對於printf,你可以這樣做:

int printf(const char *, ...); 
printf("%d\n", 1); 

但隨着snprintf,你至少需要stddef.h得到size_t

#include <stddef.h> 
int snprintf(char *, size_t, const char *, ...); 

並與非可變參數的功能,非原型聲明是有效的:

int atoi(); 
相關問題