两者之间有什么区别
proc1.UseShellExecute = false;
string Command = @"Depanalyzer targets /n Dev\Tools\CleanupPerfCounters.exe";
proc1.FileName = @"C:\Users\xx\Desktop\MyCustom.cmd";
proc1.RedirectStandardOutput = true;
proc1.Verb = "runas";
proc1.Arguments ="/k " + Command;
p.Start();
string output = p.StandardOutput.ReadToEnd();
?
1) !ret
2) ret != 0
答案 0 :(得分:2)
它们是完全等效的。 (我认为您的意思是let obj: {'x': number} | undefined
obj = Math.random() > 0.5 ? {x: 1} : undefined
if (obj) {
if (false as boolean) { // assertion widening
obj['x'] += 1 // no error
}
}
而不是==
,因为否则它们彼此对立且在任何方面都绝对不等价。)当将!=
视为布尔值,如果要比较数量,则第二个。
但是,它们的对应对象并不相同。 ret
很明显与ret
不同,因为除0以外的任何值都被视为“ true”。这看起来似乎很麻烦,但是如果您将常规整数和ret != 1
一起用作布尔值,则实际上可能会引起问题。
答案 1 :(得分:2)
在C中的布尔上下文中,零值被认为是“ false”,非零值被认为是“ true”。因此,Slider
(如果if (ret)
为真)等效于ret
(如果if (ret != 0)
不为假),并且与ret
类似(如果if (!ret)
不正确)等效于ret
(如果if (ret == 0)
为假)。
(即,假设问题正确,ret
和!ret
的含义相反。)
答案 2 :(得分:1)
这两个表达式是不同的
1) !ret
2) ret != 0
当_Bool
等于0 ret是非布尔的整数类型) >。
当ret
i 不等于0 时,第二个将产生1(即true)。
因此在此代码段中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '\0')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
在第一个条件下
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '\0')
检查ret
是否不等于0(可以等于0,但是由于条件的其他子条件,仍将执行if语句)。在第二种情况下
if (!ret && *line)
检查ret
是否等于0。
所以在内部if语句中
if (ret != 0 || stack[fd] == NULL || stack[fd][0] == '\0')
{
if (!ret && *line)
*line = NULL;
return (ret);
}
如果变量ret
等于0 ,并且*line
的值不等于0 ,则表达式{{1} }设置为*line
。