2

我开始使用 Visual Studio 2010 (c++) 编写 C 代码。

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

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

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

这怎么可能?

4

1 回答 1

10

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

int getch();

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

由于该库仍提供该getch()功能,因此在链接时解析其符号没有问题。结果,由于getch()实际上确实返回了 a int,所以一切正常。

于 2013-04-09T10:29:51.653 回答