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