首页 > 解决方案 > 通过函数在 C 中初始化嵌套 SDL_Rect 结构成员的速记或内联方法

问题描述

我正在尝试提高使用 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;
}

是否可以实现如图所示的速记版本,或者这只是它需要的方式?

这是 SDL_Rect 结构定义的链接: https ://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlrect.html

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

标签: cstructsdlsdl-2

解决方案


这似乎有效:

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};

这里的大多数示例都按名称初始化结构成员。


推荐阅读