为什么stdbool.h被弃用了?

3

根据C标准现在表示:

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

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

如果您知道这个被弃用的原因,请告诉我!


3
你认为为什么 stdbool.h 被标记为废弃? - Kami Kaze
"ability to undefine and redefine the macros" != stdbool.h - vgru
2个回答

6
您的问题有几个误解:
  • 第一个是您链接到了一个POSIX参考文献,它通常遵循C标准,但并不一定如此。

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

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

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


6
为什么stdbool.h已被弃用?
它并没有被弃用。
您引用了以下说明:
bool、true和false的宏定义可取消定义和重新定义,这是一个即将过时的特性,可能会在未来版本中删除。
这意味着以下段落可能会在未来被删除:
应用程序可以取消定义然后可能重新定义bool、true和false的宏。
这并不意味着头文件或其内容将被删除。

我认为该文本的意图是允许<stdbool.h>执行除了将truefalse定义为等同于01的宏之外的其他操作(例如,将它们定义为扩展到编译器内部函数__true__false的宏--也许是为了帮助编译器生成更有用的诊断信息)。这样的处理将被取消应用程序未定义这些宏并将它们重新定义为0和1所破坏。 - supercat
但这并不意味着 <stdbool.h> 被弃用了……恐怕不是那样。它可能意味着由于 <stdbool.h> 头文件的存在,定义 truefalsebool 宏的任务被弃用了。 - Luis Colorado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接