Не делайте этого, в общем, это просто бесполезно и подвержено ошибкам. Переменные со статическим распределением инициализируются до 0
с самого начала. Нет необходимости их инициализировать. Кроме того, для этого компилятор выбирает правильный 0
, например, 0.0
для значений типа double или константу нулевого указателя для указателей и т. Д.
Если вы хотите прояснить для себя и читателей кода, вы можете дать ему явный инициализатор, например,
static int var_1 = { 0 };
Этот резервный инициализатор всегда должен работать. Еще лучше, если у вас есть C99-совместимый компилятор, есть назначенные инициализаторы:
static int arr[3] = { [0] = 0, [1] = 42, };
Поля, которые не упомянуты в инициализаторе, снова по умолчанию инициализируются на 0
, например, здесь элемент arr[2]
.
Вся эта явная инициализация работает для статически распределенных переменных или для переменных стека (auto
).
memset
используется часто для этой цели. Просто позвольте компилятору сделать это за вас. В худшем случае он просто сделает memset
, но часто у него есть более умный способ сделать это.