getch()没有conio.h工作 - 这怎么可能?

时间:2013-04-09 10:15:03

标签: c visual-studio-2010

我开始使用Visual Studio 2010(c ++)来编写C语言。

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

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

此代码有效,即使没有添加conio.h库,程序也会暂停,但是getch();带下划线,它表示错误标识符getch();未定义

这怎么可能?

1 个答案:

答案 0 :(得分:10)

C语言具有函数的“隐式声明”概念。如果您不提供原型,编译器将假定该函数声明为:

int getch();

意味着它是一个返回int的函数,它不指定有关其参数的信息。严格来说,这不是错误,但如果您的警告级别设置得足够高,许多编译器会发出警告。此行为在C99之后被删除,您通常应该避免依赖它。

由于库仍提供getch()函数,因此在链接时解析其符号没有问题。因此,由于getch()实际上确实返回int这一事实,所有事情都有效。