Статический анализ для постоянных значений

Если я правильно понимаю, статический анализ может угадать, какие значения может иметь переменная, и определить, например, какой путь в графе потока управления никогда не будет выполнен.

У меня есть массив констант строк CStr. Метод GetValue принимает индекс в параметрах и выполняет некоторые вычисления, чтобы найти фактический индекс в массиве CStr и вернуть константную строку, указанную на этот индекс.

редактировать: фактический индекс является уникальным и постоянным для каждого параметра, переданного GetValue

Может ли статический анализ предположить, что GetValue (x) будет иметь постоянное значение? Если да, как это делается?

0

Решение

«Может ли статический анализ угадать, что GetValue (x) будет иметь постоянное значение?»

Это полностью зависит от возможностей и качества вашего инструмента статического анализа кода.
Из теории это можно обнаружить, да.


Если вы имели в виду, что компилятор может сделать вывод о константных выражениях, это также зависит от фактической реализации компилятора.

Лучший совет, который вы можете дать, это использование constexpr ключевое слово, например

 constexpr int GetValue(int x);

«Если да, то как это делается?»

Это очень обширная область, и здесь сложно дать краткий ответ.
В основном инструмент статического анализа кода отслеживает ссылки на вызовы определенных функций. Если результат этих функций может быть выведен как значение, указанное во время компиляции (например, из-за статической инициализации), фактический действительный размер / индекс обращающегося адреса из вызывающей функции известен и может быть помечен как проблема, если это вне границ.

2

Другие решения


По вопросам рекламы [email protected]