Bre*_*ale 5 gcc c-preprocessor
对于特定于编译器的代码,通常会看到cpp指令,例如:
#if defined (__GNUC__) && (__GNUC__ >= 4)
这是我通常使用的预处理器测试 - 不仅仅是__GNUC__,但它是一个常见的例子.或者,
#if (__GNUC__ >= 4)
似乎满足相同的要求.后者有潜在的问题吗?不仅与gcc,而且任何符合标准的预处理器.LHS是否可以评估为某个值,即使它没有定义?任何语言律师都知道第二种方法是否有任何陷阱?
预处理器假定未定义的宏0在比较中具有值,因此在这种情况下您的简化是正确的.如果你想核对比GCC 4更低的版本,你可能会惹上麻烦,虽然,因为这将作为评估true用<,即使它不是GCC.
如果你检查,我认为使用两者的原因也是可理解性的问题
#if defined(__GNUC__) && (__GNUC>=4)
Run Code Online (Sandbox Code Playgroud)
很明显,你不是已经处于一个只有GCC代码的块中,而是简化
#if (__GNUC__ >= 4)
Run Code Online (Sandbox Code Playgroud)
没有那么明显,只有当你已经知道它是gcc时才可以读作版本检查.