Во-первых, я предпочитаю стиль ядра Linux и предпочитаю designated initializers.
Я бы сделал то, что они делают, и создайте макрос для инициализации вашей структуры. Это упрощает добавление элементов и управление их инициализацией.
struct data {
int a;
int b;
int c;
};
#define INIT_DATA { \
.a = 0, \
.b = 0, \
.c = 0, \
}
И использовать его как это:
struct data mydata = INIT_DATA;
Продолжая стиль Linux, вы бы не более чем одна из этих переменных на линии в любом случае. Это облегчает просмотр, когда переменные добавляются/удаляются. Что случилось с:
struct data old_data = INIT_DATA;
struct data new_data = INIT_DATA;
Если у вас более пары, должны ли они быть отдельными переменными или они должны быть массивом? Если да, то вы можете воспользоваться расширением GNU, чтобы инициализировать диапазон:
struct data datas[N] = {
[0 ... N-1] = INIT_DATA,
};
В противном случае, вам нужно будет использовать обычный старый цикл, чтобы инициализировать данные во время выполнения.
Что означает «идентичные значения»? Может ли это означать '{1,2,3}' для всех объектов или только '{0,0,0}' всегда? – Gerhardh
Инициализация всех полей в 'int 0' - это одно. Инициализация на ненулевые «идентичные значения» - это другое. Какая цель? – chux
См. [Инициализация диапазона C-массива] (http://stackoverflow.com/q/7803861/2410359) – chux