Shorthand 或在 C 中通过函数初始化嵌套 SDL_Rect 结构成员的内联方法

Shorthand or inline method of initializing members of nested SDL_Rect struct in C, via function

我正在尝试提高使用 SDL2 的项目的可读性和整体组织。当涉及 SDL_Rect.

时,我试图了解在初始化嵌套结构的成员时我做错了什么

这就是我要实现的目标:

struct gfx {
  SDL_Rect rect;
} gfx;

void example()
{
  gfx.rect = {0,0,1280,720};

  return;
}

但是,这会产生“预期表达式”错误。

所以,我一直在做的事情是这样的:

struct gfx {
  SDL_Rect rect;
} gfx;

void example()
{
  gfx.rect.x = 0;
  gfx.rect.y = 0;
  gfx.rect.w = 1280;
  gfx.rect.h = 720;

  return;
}

是否有可能实现如图所示的 shorthand 版本,或者这只是它需要的方式?

下面是 SDL_Rect 结构的定义 link: https://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlrect.html

我正在使用 xCode 12.5.1,用 C、Clang、C99 编写项目。

您可以使用 复合文字 语法来实现类似的效果:

gfx.rect = (SDL_Rect){0,0,1280,720};

创建类型为 SDL_Rect 的额外本地对象并将其复制到 gfx.rect 中的开销很小。

供参考:C11 Standard draft, 6.5.2.5 Compound Literals

这似乎有效:

gfx x = {.rect = {.x = 0, .y = 0, .w = 1280, .h = 720}};

这似乎也有效,但可能会导致额外的副本

SDL_Rect r = {.x = 0, .y = 0, .w = 1280, .h = 720};
gfx y = {.rect = r};

大多数示例here按名称初始化结构成员。