2013-04-09 70 views
2

我開始使用Visual Studio 2010(C++)在C.getch()在沒有conio.h的情況下工作 - 這怎麼可能?

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    printf("test"); 
    getch(); 
    return 0; 
} 

此代碼的工作,編寫即便是不添加conio.h庫和程序被暫停在那裏,但是getch();帶有下劃線,它表示,錯誤標識符getch();未定義

這怎麼可能?

+2

只是猜測,但也許stdio.h中拉在CONIO.H(的某些部分)?從技術上講,只要代碼沒有使用C++特性,就可以在不聲明它們的情況下使用函數(但應該啓用警告來避免這種情況)。 – 2013-04-09 10:17:08

+0

我打開標準輸入輸出和STDLIB,Crtl + F鍵和搜索的getch(),但只有原來的getchar()...... – tomdavies 2013-04-09 10:18:26

+0

我敢打賭,這兩個標題含有其他包括壽」。 – 2013-04-09 10:20:10

回答

10

C語言具有用於功能「隱式聲明」的概念。如果你不提供一臺樣機,編譯器將假定功能被宣佈這樣的:

int getch(); 

這意味着它是一個函數返回int不指定有關它的參數信息。嚴格地說,這不是一個錯誤,但是如果警告級別設置得足夠高,許多編譯器會發出警告。這種行爲在C99以後被刪除了,你通常應該避免依賴它。

由於庫仍然提供了getch()功能,沒有問題解決其在鏈接時符號。因此,由於getch()實際上確實返回了int,所以一切正常。

相關問題