【发布时间】:2013-10-21 23:14:11
【问题描述】:
在我正在编写的一些代码中,我遇到了对真假的奇怪重新定义。我以前见过这样的事情,以使检查更加严格/确定,但这在我看来有点奇怪,我想知道是否有人可以告诉我这样定义的充分理由,请参阅下面的我的 cmets 他们旁边:
#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”项目移植而来的。
【问题讨论】:
-
这样的定义有时用于获得源代码的可移植性,不仅在不同的 C++ 编译器之间(可能在不同的平台上),甚至在 C 编译器和 C++ 编译器之间。
-
与
0相比,如果编译器支持bool类型,1!=1具有正确的类型。 -
您可能至少缺少以下一些东西的组合:标准前遗留代码、NIH 综合症和愚蠢。
-
我从这个问题得到了一些非常好的反馈! - 非常感谢所有对所有好的/有用的答案的 +1 :)
-
@devnull 是的,它非常相似,我想我错过了它,因为我的定义更多是在“错误”方面:(,但仍然......很好的答案谢谢大家!