Это вызов функции, использующий составной литерал. Это эквивалентно следующему:
WindowHandlers temp = {
.load = main_window_load,
.unload = main_window_unload
};
window_set_window_handlers(s_main_window, temp );
Вышеупомянутое также использует назначенные инициализаторы, где вы можете указать поля для инициализации по имени.
Предполагая, что WindowHandlers
содержит только load
и unload
в таком порядке, приведенное выше эквивалентно:
WindowHandlers temp = { main_window_load, main_window_unload };
window_set_window_handlers(s_main_window, temp );
стандарт C описывает это более подробно. .
Из раздела 6.5.2.5:
4 Постфиксное выражение, состоящее из имени типа в скобках, за которым следует заключенный в фигурные скобки список инициализаторов, является составным литералом. Он предоставляет безымянный объект, значение которого задается списком инициализаторов.
...
9 ПРИМЕР 1. Определение области действия файла
int *p = (int []){2, 4};
инициализирует p
так, чтобы он указывал на первый элемент массива из двух целых чисел, первый из которых имеет значение два, а второй — четыре. Выражения в этом составном литерале должны быть постоянными. Безымянный объект имеет статическую продолжительность хранения.
Из раздела 6.7.8:
1
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
initializer-list:
designationopt initializer
initializer-list , designationopt initializer
designation:
designator-list =
designator-list:
designator
designator-list designator
designator:
[ constant-expression ]
.identifier
...
7 Если обозначение имеет форму
.identifier
тогда текущий объект (определенный ниже) должен иметь тип структуры или объединения, а идентификатор должен быть именем члена этого типа.
...
34 ПРИМЕР 10 Члены структуры могут быть инициализированы ненулевыми значениями независимо от их порядка:
div_t answer = { .quot = 2, .rem = -1 };
person
dbush
schedule
11.08.2016
WindowHandlers
и передача ее в эту функцию. - person Alex   schedule 12.08.2016window_set_window_handlers
имеют 2 параметраs_main_window
и структуруWindowHandlers
, здесь инициализируется структураWindowHandlers
- person fedi   schedule 12.08.2016WindowHandler
. Это единственное, в чем я был уверен. Когда я написал, что был состав, это было скорее нечетко, что я рассеянно добавил, когда строил дальнейшие догадки. Не предназначен для серьезного отношения - person Alex   schedule 12.08.2016