这个问题与strdup or _strdup?的主题相同,但并不相同。该问题询问如何解决 MS的重命名,此问题询问为什么首先要这样做

出于某种原因,Microsoft已采用了POSIX C的全部功能,并且已弃用并将其替换为_前缀的变体。 isatty是其中一个示例:

https://msdn.microsoft.com/en-us/library/ms235388.aspx

This POSIX function is deprecated. Use the ISO C++ conformant _isatty instead.

关于_isatty,ISO C++到底符合什么?在我看来,MSDN帮助是完全错误的。

其他问题的答案说明了如何处理此问题。您添加_CRT_NONSTDC_NO_DEPRECATE定义。美好的。但是我想知道微软的想法。他们在重命名和弃用功能时有什么意义?仅仅是为了使C程序员的生活更加艰难吗?

最佳答案

如果您将_isatty()看作是“语言律师”,那么_isatty()符合ISO C++的事实就很有意义。

在ISO C++中,编译器仅应提供标准功能(至少对于标准 header ),不允许它们自由添加额外的功能,因为它可能与正在编译的代码中声明的功能发生冲突。由于isatty()未在标准中列出,因此在标准 header 中提供isatty()函数将不符合ISO C++。

但是,该标准的确允许编译器提供所需的任何功能,只要该功能以单个下划线开头即可。因此-语言律师时间-_isatty()符合ISO C++。

我相信这就是导致错误消息按其原样表达的逻辑。

(现在,在这种特定情况下,io.h中提供了isatty(),它实际上不是C++标准头文件,因此从技术上讲,Microsoft可以提供它,并且仍然声称自己符合标准。但是,他们还有其他不符合标准的情况。之类的函数,例如string.h中的strcmpi()(这是一个标准头)。因此,为了保持一致,它们以相同的方式弃用了所有POSIX函数,并且它们都报告了相同的错误消息。)

关于c - Microsoft下划线C函数的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37845163/

10-13 06:40