Если я правильно понимаю, статический анализ может угадать, какие значения может иметь переменная, и вывести, например, какой путь в графе потока управления никогда не будет выполнен.
У меня есть массив констант строк CStr. Метод GetValue принимает индекс в параметрах и выполняет некоторые вычисления, чтобы найти фактический индекс в массиве CStr и вернуть строку const, указанную в этом индексе.
edit: фактический индекс является уникальным и постоянным для каждого параметра, заданного GetValue
Может ли статический анализ предположить, что GetValue (x) будет иметь постоянное значение? Если да, как это делается?
"Может ли статический анализ предположить, что GetValue (x) будет иметь постоянное значение?"
Это полностью зависит от возможностей и качества вашего инструмента анализа статического кода.
Из теории, которую можно обнаружить, да.
Если вы имели в виду то, что компилятор может вывести о постоянных выражениях, это также зависит от фактической реализации компилятора.
Лучший подсказку, которую вы можете дать, использует ключевое слово constexpr
, например
constexpr int GetValue(int x);
"Если да, как это делается?"
Это очень широкое поле, и здесь трудно дать краткий ответ.
В основном статический инструмент анализа кода отслеживает ссылки на вызовы определенных функций. Если результатом этих функций может быть выведено значение, указанное во время компиляции (например, из-за статической инициализации), фактический действительный размер/индекс доступного адреса от вызывающей функции известен и может быть помечен как проблема, если это за гранью.