c++ - FALSE 和 TRUE 的奇怪定义,为什么?

标签 c++ c boolean

在我正在编写的一些代码中,我遇到了对真假的奇怪重新定义。我以前见过这样的事情来进行更严格/确定的检查,但这在我看来有点奇怪,我想知道是否有人可以告诉我这样定义的充分理由,请参阅下面的我的评论他们旁边:

#define FALSE (1 != 1) // why not just define it as "false" or "0"?
#define TRUE (!FALSE)  // why not just define it as "true" or "1"?

这个代码库中还有许多其他奇怪的东西。就像所有标准类型都有重新定义一样:

#define myUInt32 unsigned integer // why not just use uint32_t from stdint?

所有这些小“怪癖”让我觉得我错过了一些明显的东西,但我真的看不出重点:(

注意:严格来说,这是 c++ 代码,但它可能是从“c”项目移植而来的。

最佳答案

意图似乎是可移植性

#define FALSE (1 != 1) // why not just define it as "false" or "0"?
#define TRUE (!FALSE)  // why not just define it as "true" or "1"?

这些在支持 boolean 类型的语言 (C++) 中具有 boolean 类型,同时为不支持的语言提供仍然有用的数值(C — 甚至 C99 和 C11,显然,尽管它们获得了显式 boolean 数据类型)。

尽可能使用 boolean 值有利于函数重载。

#define myUInt32 unsigned integer // why not just use uint32_t from stdint?

如果 stdint 可用,那很好。你可能认为这样的事情是理所当然的,但那里是一个广阔的世界!这段代码可以识别。

免责声明:就个人而言,我坚持标准,并简单地声明 1990 年以后发布的编译器是先决条件。但我们不知道所讨论项目的基本要求是什么。

TRWTF 是有问题的代码的作者没有在旁边的评论中解释这一点。

关于c++ - FALSE 和 TRUE 的奇怪定义,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359381/

相关文章:

c - C 中的静态变量不是 "working"

c - 二维数组的动态分配

c++ - 为什么 -ffast-math 选项会破坏我的 bool 条件

c++ - 如果指针在 C++ 中为 NULL,则修改它

c++ - 如何在不将 wm_paint 发送到子窗口的情况下使父窗口无效?

c++ - 在 gdb 中打印流值 - C++

c - K&R(第二版)中没有出现在任何勘误表中的可能的新错误?

ruby-on-rails - Rails 表单在提交时将 false 作为 boolean 值的默认值传递

boolean - 仅使用 AND boolean 运算的转换函数

c++ - 在构造函数中接受某些类型