Что делает эта дополнительная пара скобок?

Глядя на кусок кода, я увидел эту строку:

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

Читая контекст, я знаю, что его намерение таково:

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

Я знаю, что две строки выше можно упростить до первого блока кода, но почему две пары скобок? Разве это не кажется излишним? Я думаю, что это нормально.

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

1 ответ

Решение

Обычно это делается для того, чтобы избежать предупреждения от компилятора о том, что присвоение должно (затем) оцениваться как условие (в случае, если разработчик пропустил = в ==)

предупреждение: предложить скобки вокруг назначения, используемого в качестве значения истинности

Что-то более показательное,

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

if (!!(b = a)) { 
Другие вопросы по тегам