2012-02-14 95 views
1

隱式聲明我編程在C和我的gcc編譯器給了我在mySedondFile.c:警告:功能

implicit declaration of function 'func' 

在我的函數調用以下警告的函數原型是myfile.h聲明:

void func(char*); 

功能定義在myfile.c

void func(char*x); 

mySecondFile.c包含:

#include "myfile.h" 

func("Hello"); 

我失去了爲什麼這會抱怨。

+2

您能否顯示這些文件的完整內容(將它們減少到最小的內容仍然會重現錯誤)?魔鬼是在這樣的細節。 – 2012-02-14 00:28:38

+0

嘗試使用'-Wall -Wextra -pedantic'編譯並查看它是否捕捉到其他內容。 – icktoofay 2012-02-14 00:39:43

回答

5

發生該錯誤是因爲func尚未在您調用它的位置聲明。

這聽起來像你的頭文件不像你所描述的。也許有一些條件代碼。也許你有一名頭球后衛不能正常工作。另一種可能性是,您收到了一個字母大小寫錯誤,並聲明函數Func,但用func調用它。很難說沒有看到實際的文件,但你需要尋找一個爲什麼func沒有在mySecondFile.c翻譯單元中聲明的原因。

爲了更清楚地說明這一點,下面的代碼:

int main(void) 
{ 
    func("Hello"); 
    return 0; 
} 

導致這樣的警告:

prog.c: In function ‘main’: 
prog.c:3: warning: implicit declaration of function ‘func’ 

這是完全按照自己的報告。

根據你的描述,你的代碼包含一個頭文件,它聲明func。編譯器要求與您有所不同,並且您仍然需要確定爲什麼func未被聲明。

+0

因此,在導致此問題的.h文件中存在一個#ifdef函數聲明。 – SSS 2012-02-15 20:43:51

+0

@SS。這些ifdefs可能會讓你很困惑! – 2012-02-15 20:48:03

+0

@SS:鑑於這篇文章已被觀看近9000次,你應該正式接受David Heffernan的回答。 – 2014-11-09 02:43:30