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

0

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

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

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

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

Теги:
static
analysis

1 ответ

2
Лучший ответ

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

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


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

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

 constexpr int GetValue(int x);

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

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

  • 0
    Я на самом деле заинтересован в реализации такого обнаружения, есть ли какое-нибудь название техники, которое вы можете мне дать?
  • 0
    @Kelvyne Боа, вы действительно имеете в виду последнюю часть своего вопроса "Если да, то как это делается?" Это слишком широкий вопрос, чтобы ответить здесь. Хотя, прежде чем начинать с нуля, вам может быть интересно расширить существующие инструменты FOSS, такие как Clang Static Analyzer или cppcheck .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню