5

conio.h 头文件中定义的两个函数有什么区别-

getch() 和 _getch()。

声明有区别吗?还是仅仅是由于标准更新而产生的差异?

4

2 回答 2

9

这是微软几年前决定更严格地解释 C++ 标准的一部分。它表示全局名称空间中以下划线开头的所有名称都保留供实现使用。这意味着 thatgetch不是保留名称,而是保留名称_getch

所以微软认为“这个函数,以及所有其他 POSIX 函数,都是由实现提供的。让我们通过添加下划线来重命名它们,这样我们就可以将它保存在全局命名空间的“保留”部分中。那这样,名称就不会与用户提供的功能发生冲突。

你可以说这些都是善意的,或者这只是破坏 POSIX 代码的邪恶尝试。我不知道他们的真正动机是什么,但最终结果是,根据微软的说法,getch它已被弃用,你应该_getch改用它。

于 2013-02-23T12:02:21.863 回答
2

这两个函数都是非标准的(即它们不在 C++ ISO 标准中)。它们是您的特定工具链提供的扩展,因此,您必须检查其文档中的差异。

于 2013-02-23T12:01:40.413 回答