Bjö*_*ist 8 c posix msvcrt deprecated visual-studio
这个问题与strdup或_strdup有关?但它不一样.那个问题询问如何解决 MS的重命名问题,这个问题问他们为什么要这样做.
出于某种原因,Microsoft已经采用了大量POSIX C函数,并且已经弃用并用_-prefixed变体替换它们.许多人的一个例子是isatty:
https://msdn.microsoft.com/en-us/library/ms235388.aspx
This POSIX function is deprecated. Use the ISO C++ conformant _isatty instead.
Run Code Online (Sandbox Code Playgroud)
ISO C++到底符合什么_isatty?在我看来,MSDN的帮助是完全错误的.
其他问题的答案解释了如何处理这个问题.你添加了_CRT_NONSTDC_NO_DEPRECATE定义.精细.但我想知道微软的想法是什么.他们在重命名和弃用函数方面有什么意义?是不是让C程序员的生活更加艰难?
Ste*_*ven 12
_isatty()符合ISO C++标准的事实是有道理的,如果你认为它像一个"语言律师".
在ISO C++下,编译器只应提供标准中的函数(至少对于标准头文件) - 它们不允许自由添加额外函数,因为它可能与正在编译的代码中声明的函数冲突.由于isatty()未在标准中列出,因此在标准头中提供isatty()函数将不符合ISO C++.
但是,只要函数以单个下划线开头,标准就允许编译器提供它想要的任何函数.所以-语言律师的时间- _isatty()是符合ISO C++.
我相信这是导致错误信息按照它的方式表达的逻辑.
(现在,在这种特殊情况下,isatty()是在io.h中提供的,它实际上并不是C++标准头文件,因此技术上微软可以提供它并且仍然声称符合标准.但是,它们还有其他不合规的像string.h中的strcmpi()函数,它是一个标准的头.因此,为了保持一致性,他们以相同的方式弃用所有POSIX函数,它们都报告相同的错误消息.)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |