Если вы действительно называете макрос как CLEAR_BIT(variable, 0x01 );
, а не, например, if(CLEAR_BIT(variable, 0x01)) ...
, тогда предупреждение неверно, и инструмент сломан.
Здесь применимо правило 13.4, в котором говорится, что вы не можете смешивать присваивание с другими выражениями (результат операции присваивания не должен использоваться). Из того, что мы можем судить по опубликованному коду, вы этого не делаете.
Кроме того, в этом коде нет непреднамеренных побочных эффектов, о чем говорят другие правила 13.1-13.2. Сложное присвоение оценивает левый операнд только один раз, поэтому не должно иметь значения, является ли оно volatile
и т. Д.
У вас есть другие проблемы с этим кодом, такие как использование целочисленной константы со знаком 0x01
и, в зависимости от типа переменной, потенциально различных нарушений правил неявного продвижения, использование функциональных макросов. Но эти проблемы должны давать совершенно разные предупреждения.