NULL检查单个if语句中的嵌套指针

mk.*_*k.. 3 c if-statement

Struct {
    int a;
    struct sample *b;
} test;

int func(struct test *t1) {
  if (!t1 || !t1->b) {  // Is this statement ok?
    return _EINVAL
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

在单个if语句中检查嵌套指针是否可以?我是否可以始终假设将首先执行左检查(在我的示例中为!t1)?

Gre*_*ill 7

是的,C语言的规则保证,如果表达aa || b是真实的,那么b不会求.(a && b如果a求值为false ,则存在类似的规则.)这称为短路评估.