Clang-tidy проверка: как определить область видимости переменныхC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Clang-tidy проверка: как определить область видимости переменных

Сообщение Anonymous »

Я пишу тест, который проверяет, существует ли уже переменная в той же области видимости. Должно быть предупреждение, если подобная переменная уже существует в той же области видимости.
Например, должна выводиться ошибка, если в классе создается int test и int Test создается в функции класса.
Это уже работает, но текущий код неправильно обрабатывает следующий случай:

Код: Выделить всё

class testclass
{
private:
int avocado;
void banana()
{
if(avocado == 0)
{
int orange = 1;
}

if(avocado == 2)
{
int Orange = 5;
// A warning is issued here although none should be
}

}
};
На данный момент программа проверки назначила два блока if одной и той же области, хотя они не должны видеть друг друга.
Это мой метод проверки на данный момент:

Код: Выделить всё

const DeclContext *Context = nullptr;

const auto *Var = Result.Nodes.getNodeAsgetDeclContext();
}

const auto *Field = Result.Nodes.getNodeAs("field");
//binding all variables from classes here
if(Field)
{
Context = Field->getDeclContext();
}

while (Context)
{
for (const auto *Decl : Context->decls())
{
// check whether current variable is already declared in the same scope
if (const auto *PreviousVar = dyn_cast(Decl))
{
if(PreviousVar == Var)
{
continue;
}

CheckforEquality(Var, PreviousVar);
CheckforEquality(Field, PreviousVar);
}

if (const auto *PreviousField = dyn_cast(Decl))
{
if(PreviousField == Field)
{
continue;
}

CheckforEquality(Var, PreviousField);
CheckforEquality(Field, PreviousField);
}
}
Context = Context->getParent();
}
К сожалению, я не знаю, как добавить, чтобы разные if-блоки не видели друг друга. Есть ли другой способ узнать, находятся ли переменные в одной области?


Подробнее здесь: https://stackoverflow.com/questions/793 ... -variables
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»