无法理解这个C语法。指定初始化结构体数组?

问题描述 投票:0回答:1

尝试学习 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”。

arrays c struct operator-precedence designated-initializer
1个回答
0
投票

未命名的

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
。或者是某种浮点类型的结构。

© www.soinside.com 2019 - 2024. All rights reserved.