gpt4 book ai didi

c - 微软下划线 C 函数的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:00:36 31 4
gpt4 key购买 nike

这个问题与strdup or _strdup? 是同一个主题。但它不一样。这个问题问的是如何解决 MS 的重命名问题,这个问题问的是为什么他们首先这样做

出于某种原因,Microsoft 弃用了一大堆 POSIX C 函数,并将它们替换为带有 _ 前缀的变体。 isatty 是其中的一个例子:

https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/posix-isatty

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

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

其他问题的答案解释了如何处理这个问题。您添加 _CRT_NONSTDC_NO_DEPRECATE 定义。美好的。但是我想知道微软的想法是什么。他们重命名和弃用函数的意义何在?难道只是为了让 C 程序员的日子更难过吗?

最佳答案

_isatty() 符合 ISO C++ 的事实如果您将其视为 是有道理的.

在 ISO C++ 下,编译器只应该提供标准中的函数(至少对于标准头文件)——他们不允许随意添加额外的函数,因为它可能与代码中声明的函数冲突正在编译。由于 isatty() 未在标准中列出,因此在标准 header 中提供 isatty() 函数将不符合 ISO C++ 标准。

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

我相信这就是导致错误消息按原样措辞的逻辑。

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

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com