为什么C标准包含许多不安全的功能,这些功能是无用的(在他们不使用的良好程序中)并且是有害的,例如getchar
?为什么C标准不包含它们的有用功能,例如getch
和getche
?它只是众多例子中的一个......为什么C标准包含许多不安全的功能,而这些功能是无用的?
UPD 我很困惑:gets
而不是getchar
。
为什么C标准包含许多不安全的功能,这些功能是无用的(在他们不使用的良好程序中)并且是有害的,例如getchar
?为什么C标准不包含它们的有用功能,例如getch
和getche
?它只是众多例子中的一个......为什么C标准包含许多不安全的功能,而这些功能是无用的?
UPD 我很困惑:gets
而不是getchar
。
你的意思是gets
?不要破坏旧程序。过时的道路很漫长。 而且,已弃用。
但是为什么不添加'getch'和'getche'?他们阻碍谁?为什么要自己拉尾痛?为什么不切断它? –
@Bush:有很多很好的理由不添加它们。一个是,许多历史体系具有完全不同的事物的相同名称的功能;试图将其中一个标准化将是其他人无法接受的。另一个原因是这些功能与stdio完全不同。例如,curses'getch'函数与curses键代码一起使用,而不是字符,并且与stdio缓冲不兼容。 –
>你的意思是得到? @Carl Norum是的,我很抱歉,我与'gets'混淆。 –
您不能在电传打字机(终端看起来像打字机)上实现getch()[无缓冲读取]。或者任何类型的数据存储在终端中的终端,直到您输入。
有些功能可以做这种事情,但要记住C是一种应该“在任何事情上运行”的语言。
gets
是很多年前的标准库的一部分,所以它必须保留 - 否则旧代码将无法编译,并且很多人喜欢使用旧代码(因为它需要很多工作来修复1000000行杂乱的代码,曾经工作!)
gets
已弃用在C99中,并已删除在C11 。
C11(ISO/IEC 9899:201X)前进/ 6
取出得到()函数
谢谢,这很有趣。 –
这有什么错'的getchar()'? – qrdl
因为输入/输出缓冲区与C无关,所以每个操作系统都实现它。 –
听起来像另一个人抱怨他的上司不完美。 C可以说是有史以来最成功的语言。 – duffymo