括号在评估某些含义时有什么作用?当检查某些内容并且他们使用时,我在代码中遇到过这个问题
if ( (some condition that returns 1) )
{
code
}
所以我的问题是,这是否评估为真的?我认为它总是错误的,因为 (1) 不返回任何东西?
编辑:澄清,问题是为什么在 if 中加上双括号?我知道 1 是真的。
括号在评估某些含义时有什么作用?当检查某些内容并且他们使用时,我在代码中遇到过这个问题
if ( (some condition that returns 1) )
{
code
}
所以我的问题是,这是否评估为真的?我认为它总是错误的,因为 (1) 不返回任何东西?
编辑:澄清,问题是为什么在 if 中加上双括号?我知道 1 是真的。
当赋值用于其真值时,使用附加括号。它们允许编译器区分
if ((var = expr))
这标志着分配和真值测试的有意组合,以及
if (var = expr)
作为一个无意的拼写错误if (var == expr)
。
从 C 和 C++ 继承而来的约定是让编译器if (var = expr)
警告if (var == expr)
. 他们不会在 上发出警告if ((var = expr))
,因为额外的一组括号向编译器发出了赋值的信号。正如 rob mayoff 解释的那样,clang 有一个特殊情况,即不会对某些任务发出警告self
,但对于许多编码人员来说,这种习惯仍然存在。
正如其他人所说,无论有没有额外的括号,生成的代码都是完全相同的。
如果你写,
if (self = [super init]) { // Warning
// ...
}
编译器会给你一个警告,因为它认为你可能=
把==
. 如果添加第二组括号,警告就会消失。
if ((self = [super init])) { // No warning
// ...
}
所以额外的括号是为了减少拼写错误的可能性。括号不会改变表达式的值。
通常 0 等于 false,NOT 0 等于 true。
这个链接解释了objective-c中的bool:http: //www.mindsizzlers.com/2010/04/objective-c-and-the-properties-of-bool/
bool
和的真假值int
false
等于 的int
值0
。true
等价于int
非零值(例如1
, 10
, 3000
, 等)例如,考虑下面的 C 代码示例:
bool bValue;
int nValue;
bValue = true;
nValue = 1;
if (bValue == nValue) {
printf("bValue and nValue are the same!\n");
}
// output: bValue and nValue are the same!
以下两个片段返回完全相同的结果。
if ((((((((((((((((((((1)))))))))))))))))))) {
printf("Hello World!\n");
}
返回与以下相同的结果:
if (1) {
printf("Hello World!\n");
}
if
语句中的表达在您给定的if
语句中,您必须有一个解析为真值或假值的表达式。有关表达式的示例,请参阅此页面。