(int ret = 0; !ret && ret !=0) 之间的差异
Difference between (int ret = 0; !ret && ret !=0)
有什么区别:
1) !ret
2) ret != 0
?
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
它们完全等价。 (我假设你的意思是 ==
而不是 !=
因为否则它们彼此相反并且绝对不等同。)当 ret
应该被视为一个时,我会推荐第一个如果要比较数量,则为布尔值和第二个。
然而,他们的对应物并不等同。 ret
显然与 ret != 1
不同,因为除 0 之外的任何值都被视为 "true"。这看起来似乎很简单,但如果您将常规整数作为布尔值与 #define true 1
.
一起使用,它实际上会导致问题
这两个表达方式不同
1) !ret
2) ret != 0
当ret
等于0.
当 ret
is 不等于 0.
时,第二个产生 1(即真)
所以在这段代码中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
第一个条件
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=12=]')
检查ret
是否不等于0(可以等于0但if语句仍然会因为其他sub-conditions条件而执行)。在第二种情况下
if (!ret && *line)
检查ret
是否等于0。
所以在内部 if 语句中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
如果变量ret
等于0而*line
的值不等于0 然后表达式 *line
设置为 NULL
.
在 C 语言的布尔上下文中,零值被视为 "false",non-zero 值被视为 "true"。因此 if (ret)
(如果 ret
为真)等价于 if (ret != 0)
(如果 ret
不为假),类似地 if (!ret)
(如果 ret
不正确)等同于 if (ret == 0)
(如果 ret
为假)。
(即!ret
和ret != 0
的意思相反,假设题目正确。)
有什么区别:
1) !ret
2) ret != 0
?
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
它们完全等价。 (我假设你的意思是 ==
而不是 !=
因为否则它们彼此相反并且绝对不等同。)当 ret
应该被视为一个时,我会推荐第一个如果要比较数量,则为布尔值和第二个。
然而,他们的对应物并不等同。 ret
显然与 ret != 1
不同,因为除 0 之外的任何值都被视为 "true"。这看起来似乎很简单,但如果您将常规整数作为布尔值与 #define true 1
.
这两个表达方式不同
1) !ret
2) ret != 0
当ret
等于0.
当 ret
is 不等于 0.
所以在这段代码中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
第一个条件
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=12=]')
检查ret
是否不等于0(可以等于0但if语句仍然会因为其他sub-conditions条件而执行)。在第二种情况下
if (!ret && *line)
检查ret
是否等于0。
所以在内部 if 语句中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '[=11=]')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
如果变量ret
等于0而*line
的值不等于0 然后表达式 *line
设置为 NULL
.
在 C 语言的布尔上下文中,零值被视为 "false",non-zero 值被视为 "true"。因此 if (ret)
(如果 ret
为真)等价于 if (ret != 0)
(如果 ret
不为假),类似地 if (!ret)
(如果 ret
不正确)等同于 if (ret == 0)
(如果 ret
为假)。
(即!ret
和ret != 0
的意思相反,假设题目正确。)