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
中的开销很小。
这似乎有效:
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按名称初始化结构成员。
我正在尝试提高使用 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
中的开销很小。
这似乎有效:
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按名称初始化结构成员。