我说我在c语言编程方面有中级经验,但是我从来没有见过这个语法用来创建函数.这让我想起了JQuery事件的语法.总的来说,我想详细解释这是什么以及替代语法可能是什么.我可以更好地阅读更多有关此内容的链接也很棒.
// Set handlers to manage the elements inside the Window window_set_window_handlers(s_main_window,(WindowHandlers) { .load = main_window_load,.unload = main_window_unload });
解决方法
WindowHandlers temp = { .load = main_window_load,.unload = main_window_unload }; window_set_window_handlers(s_main_window,temp );
上面还使用了指定的初始值设定项,您可以在其中指定要按名称初始化的字段.
假设WindowHandlers只包含该顺序的加载和卸载,则上述内容相当于:
WindowHandlers temp = { main_window_load,main_window_unload }; window_set_window_handlers(s_main_window,temp );
C standard更详细地介绍了这些内容.
从6.5.2.5节:
@H_403_23@4 A postfix expression that consists of a parenthesized type
name followed by a brace-enclosed list of initializers is a
compound literal. It provides an unnamed object whose value is
given by the initializer list.
…
9 EXAMPLE 1 The file scope definition
06002
initializes p
to point to the first element of an array of
two ints,the first having the value two and the second,four.
The expressions in this compound literal are required to be
constant. The unnamed object has static storage duration.
从第6.7.8节开始:
@H_403_23@1
06003
…
7 If a designator has the form
06004
then the current object (defined below) shall have structure
or union type and the identifier shall be the name of a member of
that type.
…
34 EXAMPLE 10 Structure members can be initialized to nonzero values without depending on their order:
06005