Инициализация глобальных переменных

Если ваш код содержит 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 соответствующее значение представляет значение глобальной переменной сразу после инициализации.