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

时间:2017-11-25 07:00:23

标签: c if-statement parentheses

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

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

阅读上下文,我知道它的意图是这样的:

b = a;
if (b != 0) { /* statements */ }

我知道上面的两行可以简化为第一个代码块,但为什么两对括号?这似乎不是多余的吗?我认为这完全没问题:

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

1 个答案:

答案 0 :(得分:1)

通常会这样做以避免来自编译器的警告,即将(然后)评估作为条件进行评估(如果开发人员错过了=中的==

  

警告:建议用作真值的分配括号

更具指示性的东西,

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

if (!!(b = a)) {