在我目前的代码库中,我看到以下模式:
#if SOMETHING_SUPPORTED+0 != 0
...
#endif
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个非常古老的代码库,没有人知道它是如何以及为何开始的 我认为它是从C开始的,它慢慢地转换为C类,现在它倾向于C++
我看不到使用先前构造而不是"经典"的任何明显优势,但也许我错过了一些东西:
#if SOMETHING_SUPPORTED
...
#endif
Run Code Online (Sandbox Code Playgroud)
你知道为什么会使用#if MACRO+0 != 0而不是#if MACRO?
为了评估#if条件,我的预处理器似乎假设未定义的常量为0 .
可以依赖它,还是未定义的常量给出未定义的行为?