尝试学习 C 的细微差别,尽管我做得很好,直到我发现这个:
#define SOKOL_IMPL
#define SOKOL_GLES3
#include "sokol_gfx.h"
#include "sokol_log.h"
#include "emsc.h"
static struct {
sg_pipeline pip;
sg_bindings bind;
sg_pass_action pass_action;
} state = {
.pass_action.colors[0] = { .load_action = SG_LOADACTION_CLEAR, .clear_value = { 0.0f, 0.0f, 0.0f, 1.0f } }
};
这是 Sokol 库的示例代码:https://github.com/floooh/sokol-samples/blob/master/html5/triangle-emsc.c
我知道第一个结构声明还声明了一个变量“state”,然后我认为这个新变量使用“指定的初始化”分配给“=”之后的任何内容。我不明白 .pass_action.colors[0] 是什么。
我认为“colors”是 pass_action 中的一个字段,这反过来又使 pass action 成为一个结构体,而颜色应该是一个数组。但是,“颜色”赋值再次使用指定的 inits 惯用方式来构造。
所以,也许 .colors[0] 是 .pass_action 的一个字段,也是一个结构体数组,它有两个字段:“load_action”和“clear_value”。那是对的吗?在取得进展之前我需要确定。
“指定初始化”:https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
更新:sg_pass_action在这里声明,“colors”类型在上面几行定义https://github.com/floooh/sokol/blob/6f8121e6aa523b0c0a3e9d7212073bab9a885e15/sokol_gfx.h#L2542
这已在 Reddit 上的其他地方向我指出并清除了所有内容(我认为)。 “colors”是一个“sg_color_attachment_action”类型的数组,它本身是一个结构体。尺寸为“SG_MAX_COLOR_ATTACHMENTS”。
未命名的
struct
有3个成员pip
、bind
和pass_action
以及相应的变量state
隐式将pip
和bind
初始化为零,并将pass_action
初始化为复合值:.pass_action.colors[0] = { .load_action = SG_LOADACTION_CLEAR, .clear_value = { 0.0f, 0.0f, 0.0f, 1.0f } }
。 这意味着我们可以推测成员 pass_action
是一个 struct
并且其中一个成员 colors
是 struct
的数组或指针。 struct
具有成员 load_action
和 clear_value
。 clear_value
可能是至少 4 个元素的数组 float
或至少有 4 个成员的 struct
。或者是某种浮点类型的结构。