Когда вы запускаете анализ Bug Finder™, Polyspace® делает определенные предположения об инициализации глобальных переменных. Эти предположения зависят от того, как вы объявляете и задаете глобальные переменные. Для примера в этом коде
int foo(void) {
return 1/gvar;
}
gvar
в этих случаях:
Вы задаете int gvar;
в исходном коде и предоставить main
функция, которая вызывает foo
. Bug Finder следует стандартам ANSI, в которых значение переменной равняется нулю.
Вы задаете int gvar;
или объявить extern int gvar;
в исходном коде. Еще одна функция вызывает foo
и устанавливает gvar=0
. В противном случае, когда ваши исходные файлы являются неполными и не содержат main
функция, Bug Finder не делает никаких предположений об инициализации gvar
.
Вы заявляете const int gvar;
. Bug Finder предполагает gvar
инициализируется в нуль из-за const
ключевое слово.
За счет, возможно, более длительного времени выполнения можно выполнить более исчерпывающий анализ, где все значения рассматриваются для каждого чтения глобальной переменной foo
или его телят при выявлении дефектов. См. «Расширение Bug Finder Checkers для поиска дефектов из значений Входа конкретной системы».
Допущения к анализу Bug Finder | Входы в Polyspace Bug Finder