4

括号在评估某些含义时有什么作用?当检查某些内容并且他们使用时,我在代码中遇到过这个问题

if ( (some condition that returns 1) )
{
code
}

所以我的问题是,这是否评估为真的?我认为它总是错误的,因为 (1) 不返回任何东西?

编辑:澄清,问题是为什么在 if 中加上双括号?我知道 1 是真的。

4

4 回答 4

11

当赋值用于其真值时,使用附加括号。它们允许编译器区分

if ((var = expr))

这标志着分配和真值测试的有意组合,以及

if (var = expr)

作为一个无意的拼写错误if (var == expr)

从 C 和 C++ 继承而来的约定是让编译器if (var = expr)警告if (var == expr). 他们不会在 上发出警告if ((var = expr)),因为额外的一组括号向编译器发出了赋值的信号。正如 rob mayoff 解释的那样,clang 有一个特殊情况,即不会对某些任务发出警告self,但对于许多编码人员来说,这种习惯仍然存在。

正如其他人所说,无论有没有额外的括号,生成的代码都是完全相同的。

于 2013-03-13T08:06:46.087 回答
3

如果你写,

if (self = [super init]) { // Warning
    // ...
}

编译器会给你一个警告,因为它认为你可能===. 如果添加第二组括号,警告就会消失。

if ((self = [super init])) { // No warning
    // ...
}

所以额外的括号是为了减少拼写错误的可能性。括号不会改变表达式的值。

于 2013-03-13T08:08:39.313 回答
2

通常 0 等于 false,NOT 0 等于 true。

这个链接解释了objective-c中的bool:http: //www.mindsizzlers.com/2010/04/objective-c-and-the-properties-of-bool/

于 2013-03-13T07:59:34.633 回答
1

bool和的真假值int

  • 的布尔值false等于 的int0
  • 的布尔值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语句中,您必须有一个解析为真值或假值的表达式。有关表达式的示例,请参阅页面。

于 2013-03-13T07:57:01.300 回答