Если ваш код содержит функцию main
, верификация полагает, что глобальные переменные инициализируются согласно стандартам ANSI® C. Значения по умолчанию:
0 для int
0 для char
0.0 для float
Чтобы отключить это предположение и повысить ошибку для глобальных переменных, не явным образом инициализированных, используйте опцию Ignore default initialization of global variables (-no-def-init-glob)
.
Если ваш код не имеет функции main
, программное обеспечение начинает проверять каждую невостребованную функцию учитывая, что глобальные переменные имеют полнофункциональное значение, ограниченное только их типом данных.
Программное обеспечение использует фиктивный функциональный _init_globals()
, чтобы инициализировать глобальные переменные. Функция _init_globals()
является первой функцией, неявно вызванной в функции main
.
Считайте следующий код в приложении gv_example.c
.
extern int func(int); /* External function */ /* Global variables initialized in _init_globals() */ /* before the execution of main() procedure */ int garray[3] = {1, 2, 3}; /* Initialized: written in __init_globals() */ int gvar = 12; /* Initialized: written in __init_globals() */ int main(void) { int i, lvar = 0; for (i = 0; i < 3; i++) lvar += func(garray[i] + gvar); return lvar; }
После верификации:
На панели Results List, если вы выбираете File из списка под узлом gv_example.c
, вы видите _init_globals
.
На панели Variable Access gv_example._init_globals
представляет первую операцию записи на глобальной переменной, например, garray
. В столбце Values соответствующее значение представляет значение глобальной переменной сразу после инициализации.