C 中赋值操作的未知行为

Unknown behaviour of assignment op in C

我不知道从这个构造中返回 true 和 false 的确切情况。你能描述一下吗?对不起,如果它在 google 搜索中,我没有找到。

( (struct->param = param_init()) == NULL )

param_init() 该语句将首先被计算,输出将存储在 struct->param 中。 如果 struct->param 包含 NULL,if 条件将被评估为 true 或者如果 struct->param 包含 non NULL,if conditional 将被评估为 false.

由于赋值运算符的优先级最低,这就是为什么它总是最后执行的原因,所以在第一个括号中,函数 param_init() 将首先被调用,并且该函数的 return 值将被调用分配给结构指针 struct->param 并且 struct->param 的最后一个值将与 0(NULL) 进行比较,结果(0 或 1)将 return 。 注意:删除括号会更改结果,因为它会更改优先级。

if ( (struct1->param = param_init()) == NULL )

是一种混淆的写法

struct1->param = param_init();
if(struct1->param == NULL)
{
  ...
}

使用后一种形式,应避免在条件内赋值。