如果逻辑运算的求值优先,则C组合

  • 本文关键字:组合 逻辑运算 如果 c
  • 更新时间 :
  • 英文 :


我想知道是否总是编译以下代码,这样就不会出现非法的NULL ptr引用?

我担心的是,编译器可能会在第一次检查"b"是否为NULL之前检查是否为b->值。

typedef struct
{
    int value;
} mystruct;
int func(mystruct * b)
{
    if((NULL == b) || (b->value == 0))
    {
        return -1;
    }
    printf("value: %dn", b->value);
}

如果bNULL,则(NULL != b)false,则将检查第二面。(请参阅短路评估),您可能会得到NULL ptr取消引用。

||更改为&&

是的,(NULL != b)将在(b->value == 0)之前进行测试。

你所做的就是所谓的短路评估。

您不必担心,除非第一个条件尚未确定结果,否则不会执行第二个条件。

最新更新