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)
{
...
}
使用后一种形式,应避免在条件内赋值。
我不知道从这个构造中返回 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)
{
...
}
使用后一种形式,应避免在条件内赋值。