【问题标题】:Why is stdbool.h deprecated? [closed]为什么不推荐使用 stdbool.h? [关闭]
【发布时间】:2018-12-21 17:00:52
【问题描述】:

C standard now says:

取消定义和重新定义宏 bool、true 和 false 的功能已过时,可能会在未来的版本中删除。

也就是说,stdbool.h 已被弃用。但是没有给出任何理由,我也找不到。他们打算永远添加 bool 作为基本类型还是有其他东西?

如果你碰巧知道为什么不推荐使用它,谢谢你告诉我!

【问题讨论】:

  • 为什么你认为 stdbool.h 已被弃用?
  • "ability to undefine and redefine the macros" != stdbool.h

标签: c c11 stdbool


【解决方案1】:

为什么不推荐使用 stdbool.h?

不是。

您引用了以下注释:

取消定义和重新定义宏 bool、true 和 false 的功能已过时,可能会在未来的版本中删除。

这意味着将来可能会删除以下段落:

应用程序可以取消定义,然后可能重新定义宏 bool、true 和 false。

这并不意味着标题或其内容将被删除。

【讨论】:

  • 我认为该文本的目的是允许<stdbool.h> 做一些事情,而不是将truefalse 定义为相当于01 的宏(例如将它们定义为扩展为编译器内在函数 __true__false 的宏——也许可以帮助编译器生成更有用的诊断信息)。如果应用程序未定义这些宏并将它们重新定义为 0 和 1,则会破坏这种处理。
  • 但这并不意味着 <stdbool.h> 已被弃用.... 恐怕。这可能意味着因为<stdbool.h> 标头的存在,truefalsebool 定义宏的任务已被弃用。
【解决方案2】:

您的问题存在一些误解:

  • 首先是链接到 POSIX 引用,它通常遵循 C 标准,但并非必须如此。

  • 您引用的部分是信息性 而非事实,因此可能根本不反映 C 标准。因此它也不具有权威性。

  • 引用还说 用户 取消定义或重新定义宏的能力是可以取消的。 <stdbool.h> 头文件中的宏不会受此影响。

  • 最后,它还说可能被带走的可能性,而不是它将会或已经被带走。

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2016-02-23
    • 2017-11-04
    • 2011-10-22
    相关资源
    最近更新 更多