这对额外的括号有什么作用?
What does this extra pair of parentheses do?
在查看一段代码时,我看到了这一行:
if ((b = a)) { /* statements */ }
看了上下文,我知道它的用意是这样的:
b = a;
if (b != 0) { /* statements */ }
我知道上面两行可以简化成第一个代码块,但是为什么是两对括号呢?这不会显得多余吗?我认为这完全可以:
if (b = a) { /* statements */ }
通常这样做是为了避免来自编译器的警告,即分配将(然后)作为条件进行评估(以防开发人员在 ==
中错过 =
)
warning: suggest parentheses around assignment used as truth value
更具指示性的东西,
int c = !!(b = a); // condition
if (!!(b = a)) {
在查看一段代码时,我看到了这一行:
if ((b = a)) { /* statements */ }
看了上下文,我知道它的用意是这样的:
b = a;
if (b != 0) { /* statements */ }
我知道上面两行可以简化成第一个代码块,但是为什么是两对括号呢?这不会显得多余吗?我认为这完全可以:
if (b = a) { /* statements */ }
通常这样做是为了避免来自编译器的警告,即分配将(然后)作为条件进行评估(以防开发人员在 ==
中错过 =
)
warning: suggest parentheses around assignment used as truth value
更具指示性的东西,
int c = !!(b = a); // condition
if (!!(b = a)) {