2010-02-07 61 views
3

當我編譯使用程序只是Cygwin的海灣合作委員會在IDE失敗抱怨「退出」未申報

gcc code.c 

有沒有消息,並且成功生成的輸出文件。輸出的文件起作用。然而,當我嘗試在同一Cygwin安裝的gcc編譯器在IDE(我試過Netbeans和開發 - C++),我收到以下錯誤

main.cpp:27: error: `exit' undeclared (first use this function) 
main.cpp:27: error: (Each undeclared identifier is reported only once for each function it appears in.) 
main.cpp:77: error: `write' undeclared (first use this function) 
main.cpp:78: error: `close' undeclared (first use this function) 

我看不出有什麼不同了。爲什麼不編譯?

好的,問題是在IDE中,文件有一個.cpp擴展名,而當我從終端編譯時,它有一個.c擴展名。所以,我的新問題是爲什麼當它被當作C++文件處理時它不會編譯。 C不是C的子集嗎?

+1

你可以發佈代碼嗎? – ergosys

+1

你有沒有'#include '? –

回答

5

C++比C更嚴格.C允許你在沒有原型的情況下調用一個函數,C++不允許這樣做。

爲了解決這個問題,要添加:

#include <stdlib.h> 

另外,在命令行編譯時。確保使用的-Wall標誌,所以你會得到一些重要警告:

gcc -Wall code.c 
0

您將不得不使用g++編譯.cpp文件。

+0

exit(),write(),close()都被C支持。 – sud03r

+0

就像我說過的,當我做'gcc file.c'時它編譯得很好。 – Verhogen

0

一個可能的原因可能是IDE無法訪問包含文件,cygwin gcc編譯器可能期望它在/usr/include(不確定),並且dev-cpp可能無法訪問它。

1

IDE所使用fussier選項編譯器。您需要包括一些頭:

#include <stdlib.h> // exit() 
#include <unistd.h> // close(), write() 

默認選項允許幾乎任何可能是C編譯。從外觀上看,IDE將'-Wmissing-prototypes'設置爲編譯器選項之一。


如果你用C++編譯器編譯代碼,你必須確保所有功能都在使用前聲明。 C是漸變的(或者可以是sloppier) - 建議在確定所有函數被定義或引用之前聲明所有函數,但這不是強制性的。在C++中它不是可選的。

C的一個子集也是C++的一個子集;有些C不是C++,有很多C++不是C.特別是,一個任意C程序通常不是C++程序。例如,C程序可能不會聲明'exit()',但它既可以使用它,也可以編譯。一個C++程序必須先聲明'exit()',然後才能使用它並進行編譯。

相關問題