C 这对额外的括号起什么作用?

C 这对额外的括号起什么作用?,c,if-statement,parentheses,C,If Statement,Parentheses,在查看一段代码时,我看到这行代码: if ((b = a)) { /* statements */ } 阅读上下文,我知道其意图如下: b = a; if (b != 0) { /* statements */ } 我知道上面的两行代码可以简化为第一个代码块,但为什么这两对括号是?这难道不是多余的吗?我认为这完全可以: if (b = a) { /* statements */ } 通常这样做是为了避免编译器发出警告,即赋值将(然后)作为一个条件进行评估(以防开发人员在=中遗漏了=) 警告

在查看一段代码时,我看到这行代码:

if ((b = a)) { /* statements */ }
阅读上下文,我知道其意图如下:

b = a;
if (b != 0) { /* statements */ }
我知道上面的两行代码可以简化为第一个代码块,但为什么这两对括号是?这难道不是多余的吗?我认为这完全可以:

if (b = a) { /* statements */ }

通常这样做是为了避免编译器发出警告,即赋值将(然后)作为一个条件进行评估(以防开发人员在
=
中遗漏了
=

警告:建议在用作真值的赋值周围加括号

更具指示性的东西

int c = !!(b = a); // condition

if (!!(b = a)) {