У меня есть макрос, который выглядит так:
#define coutError if (VERBOSITY_SETTING >= VERBOSITY_ERROR) ods()
где ods () - это класс, который ведет себя подобно cout, а VERBOSITY_SETTING - глобальная переменная. Есть несколько из них для различных настроек многословия, и это позволяет коду выглядеть примерно так:
if (someErrorCondition)
{
// ... do things relating to the error condition ...
coutError << "Error condition occurred";
}
И в этом фреймворке есть функциональные возможности для настройки многословия и т. Д. Однако очевидный шаблон ломается, если не использовать фигурные скобки в чем-то вроде этого:
void LightSwitch::TurnOn()
{
if (!PowerToSwitch)
coutError << "No power!";
else
SwitchOn = true;
}
из-за макроса превратится в это:
void LightSwitch::TurnOn()
{
if (!PowerToSwitch)
if (VERBOSITY_SETTING >= VERBOSITY_ERROR)
ods() << "No power!";
else
SwitchOn = true;
}
Что не является предполагаемой функциональностью оператора if.
Теперь я понимаю способ правильно исправить этот макрос, чтобы он не вызывал этой проблемы, но я бы хотел провести аудит кода и найти любое место с таким шаблоном "if (..." ) coutError << ...; еще ", чтобы выяснить, есть ли другие случаи, когда это происходит, чтобы убедиться, что при исправлении макроса действительно будут правильные функции. </p>
Я могу использовать любой язык / инструмент, чтобы найти это, я просто хочу знать лучший способ сделать это.