2013-04-09 46 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,所以一切正常。

相关问题