getch已被弃用

Dun*_*oit 15 c deprecated

在某个地方,我在大学里做过一些C和C++,但是我并没有太多关注C++.现在我想关注C++,但是当我使用该getch()函数时,我会从下面收到警告.

警告C4996:'getch':不推荐使用此项目的POSIX名称.而是使用符合ISO C++的名称:_getch.详细信息请参见在线帮助.

现在,我正在使用VS 2005 express,我不知道如何处理这个警告.我需要getch()printf()错误消息或其他需要密钥命中的内容之后使用.

你能帮帮我吗?

Joh*_*itb 23

Microsoft决定在不使用下划线的情况下标记名称,因为这些名称是为程序员选择保留的.如果实现特定扩展要遵守C或C++标准,则应使用以全局命名空间中的下划线开头的名称 - 或者它们应将自身标记为符合标准的组合环境,例如POSIX/ANSI/ISO C,其中函数然后对应于那些标准之一.

阅读关于getcwd()的这个答案也是如此,PJ Plauger的解释当然是非常了解的东西.

如果您只想等待用户键入的某些键,则没有理由不使用getchar.但有时它对用户_getch和朋友来说更实用和方便.但是,这些不是由C或C++标准指定的,因此会限制程序的可移植性.记在脑子里.


Eli*_*sky 9

如果你是C++,为什么printfgetch?考虑使用coutcin.get不是.


Bri*_*ell 5

正如错误所示,该名称getch()已被弃用(因为这是 Microsoft 特定的扩展),_getch()建议改为使用。我不确定 POSIX 是从哪里来的;POSIX 没有定义getch(),而是包含ISO C 标准getchar()指定的内容(第 298 页,草案链接到,因为最终标准不是免费的)。解决方案是按照建议进行操作并使用,或者使用标准 C 。_getch()getchar()

  • `getch` 与 `getchar` 关系不大。相反,它是一个conio(我相信也是curses)界面,其目的是交互式地从键盘读取单个字符,而无需缓冲/延迟。 (3认同)

小智 5

使用 _getch() 而不是 getch()

  • 你能解释为什么提问者应该使用一个而不是另一个吗?解决问题固然很好,但了解问题以及解决方案为何有效则更好。 (3认同)