getch()在没有conio的情况下工作,这怎么可能呢?



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

#include <stdio.h>
#include <stdlib.h>
int main(){
    printf("test");
    getch();
    return 0;
}

这段代码可以工作,即使没有添加conio.h库,程序在那里暂停,但是getch();下划线表示错误标识符getch();是未定义的 .

这怎么可能?

C语言对函数有一个"隐式声明"的概念。如果不提供原型,编译器将假定函数是这样声明的:

int getch();

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

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