2014-11-28 2 views
0

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

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

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

Может статический анализ угадайте, что ПолучитьЗначение (х) будет иметь постоянное значение? Если да, как это делается?

ответ

2

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

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

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

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

constexpr int GetValue(int x); 

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

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

+0

Я действительно заинтересован в реализации такого обнаружения, есть ли какое-либо название техники, которое вы можете мне дать? – Kelvyne

+0

@ Kelvyne Boah, вы действительно имеете в виду эту последнюю часть своего вопроса. «Если да, как это делается?» _, Это слишком широкий вопрос, на который нужно ответить здесь. Хотя, прежде чем начать с нуля, вам может быть интересно расширить существующие инструменты FOSS, такие как [Clang Static Analyzer] (http://clang-analyzer.llvm.org/) или [cppcheck] (http: //cppcheck.sourceforge .сеть/). –

Смежные вопросы