Быстрый тест показывает, что a и c равны 0.
int a;
static int c;
int main() {
printf("%d %d\n", a, c);
return 0;
}
Местоположение a (и c) определяется во время компиляции; то есть они не помещаются ни в стек, ни в интервал памяти, возвращаемый функцией malloc. Я думаю, что стандарт C говорит, что во всех случаях они инициализируются равными 0.
Я на 99,9% уверен в отношении c
и на 98% уверен в отношении a
. Ключевое слово static
в контексте глобальных переменных действительно аналогично private
в (скажем) C ++ и Java: оно касается видимости, а не места хранения.
То, что Эндрю Хэйр говорит о неинициализированных переменных, верно для данных, хранящихся в стеке или в памяти malloc'd. Для статически хранимых переменных это не так.