Что делает эта дополнительная пара скобок?
Глядя на кусок кода, я увидел эту строку:
if ((b = a)) { /* statements */ }
Читая контекст, я знаю, что его намерение таково:
b = a;
if (b != 0) { /* statements */ }
Я знаю, что две строки выше можно упростить до первого блока кода, но почему две пары скобок? Разве это не кажется излишним? Я думаю, что это нормально.
if (b = a) { /* statements */ }
1 ответ
Решение
Обычно это делается для того, чтобы избежать предупреждения от компилятора о том, что присвоение должно (затем) оцениваться как условие (в случае, если разработчик пропустил =
в ==
)
предупреждение: предложить скобки вокруг назначения, используемого в качестве значения истинности
Что-то более показательное,
int c = !!(b = a); // condition
if (!!(b = a)) {