If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Wednesday, July 18, 2007

Инициализация структур

В стандарте С99 (6.7.8) есть интересная вещь - так называемые designators (обозначения?). Их использование позволяет инициализировать элементы структур при помощи списка инициализации не обращая внимания на порядок следования элементов. Например

struct StTest {
int i;
char c;
double d;
};

int main(int argc, char *argv[])
{
struct StTest st1={.d=0.1, .i=1, .c='a'},
st2={.c='b',.d=0.2,.i=2};
printf("st1.i= %d st1.c= %c st1.d= %f\n",st1.i,st1.c,st1.d);
printf("st2.i= %d st2.c= %c st2.d= %f\n",st2.i,st2.c,st2.d);
return EXIT_SUCCESS;
}

А вот собственно и результат работы такой програмки

commander@a64:$ ./teststructinit
st1.i= 1 st1.c= a st1.d= 0.100000
st2.i= 2 st2.c= b st2.d= 0.200000

Такая вещь бывает очень полезна, так как нет необходимости помнить порядок следования элементов структуры.