c - 这个 C 函数语法是什么?

标签 c function pebble-watch pebble-sdk procedural-programming

<分区>

我会说我有使用 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
  });

这是来自 Pebble WatchApp tutorial 的代码片段.

最佳答案

这是一个使用复合文字的函数调用。它等效于以下内容:

WindowHandlers temp = {
    .load = main_window_load,
    .unload = main_window_unload
  };
window_set_window_handlers(s_main_window, temp );

上面还使用了指定的初始化器,您可以在其中指定要按名称初始化的字段。

假设 WindowHandlers 按顺序只包含 loadunload,以上等同于:

WindowHandlers temp = { main_window_load, main_window_unload };
window_set_window_handlers(s_main_window, temp );

C standard更详细地介绍了这些。

来自第 6.5.2.5 节:

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

int *p = (int []){2, 4};

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 节:

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 If a designator has the form

.identifier

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:

div_t answer = { .quot = 2, .rem = -1 };

关于c - 这个 C 函数语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38906651/

相关文章:

c - 如何只将最后 10 行写入 C 文件?

c - 在 C 中将常量类型转换为 short int 时发出警告

c - 当在它之前调用另一个函数时函数返回不同的值

c - 如何在 Mac OS X 上安装 Pebble SDK

javascript - 从 Pebble JS 访问联系人列表

c - C语言中的Pascal和cdecl关键字

c - Linux套接字编程: Socket writing line to a file in c

javascript - 每隔一分钟运行一次 JS 函数

javascript - 在定义之前使用 javascript 函数