首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getch()和_getch()之间的差异

getch()和_getch()之间的差异
EN

Stack Overflow用户
提问于 2012-08-17 15:47:49
回答 1查看 30.7K关注 0票数 2

可能重复: getch is deprecated

正如标题所说,这两种方法有什么不同?我是新来的,所以我对它们的用法感到困惑.

EN

回答 1

Stack Overflow用户

发布于 2012-08-18 06:58:04

Microsoft C编译器的非常老的实现提供了使用与POSIX/UNIX世界中相同的名称和/或侵犯用户名称空间的名称的函数。请注意,其中一些是‘侵权’很可能是在标准化之前(在MS时代)。

很久以前,微软决定将这些名称移到为编译器实现保留的一组名称中。严格地说,他们在图书馆里的许多名字都是这样做的,即使他们可能没有必要这样做。看起来,对于所有不是标准C/C++的库名,他们都这样做了。请注意,这不适用于SDK中的名称--这组标头和库位于编译器实现域之外,即使SDK与编译器一起分发。

为了与用旧名称(没有下划线的程序)编写的程序兼容,微软提供了一个库oldnames.lib,它实现了将旧名称(例如getch)链接到新名称(_getch)的别名。两个名称都引用了完全相同的代码。因此,就工作而言,您可以使用任何一个名称(尽管您可能需要设置您的项目以在oldnames.lib中链接)。

如果您有使用旧名称的旧Windows代码,我认为最好只在oldnames.lib中链接并完成。

对于新代码,我认为使用新名称(带有下划线并在oldnames.lib中不链接)可能会稍微好一些。旧的名字被微软所反对,其他的都是相等的,这很可能会使标尺倾斜。如果您最终将代码移植到POSIX系统或将POSIX代码移植到Windows,则更有可能提醒您注意需要注意的地方。这些函数看起来和POSIX版本很像,但它们可能需要以稍微不同的方式使用--特别是在错误处理中。

或者您可以尝试像PDCurses这样的库,或者使用自己的包装来提供可移植性,这取决于它对您的价值。或者,如果您真的想在Windows上使用POSIX可移植性,Cygwin可能是一种选择( Unix的服务还在吗?)

MSVC和POSIX函数之间细微差别的一些例子,它们具有相同/相似的名称:

  • Windows上的getch()从来不回显字符,总是阻塞直到输入,需要多次调用才能读取某些键,并且不能返回错误。这些行为与POSIX不同。
  • Windows上的ungetch()返回传入的字符或错误时的EOF。在POSIX上,它返回OKERR
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12008979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档