You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数内初始化嵌套SDL_Rect结构体成员的简写方法咨询

解决方案

你想要的简写赋值完全可以通过C99标准提供的复合字面量特性实现,你所用的Clang编译器完全支持该语法,修改后的写法如下:

struct gfx {
  SDL_Rect rect;
} gfx;

void example()
{
  // 复合字面量写法,和你预期的写法几乎一致
  gfx.rect = (SDL_Rect){0, 0, 1280, 720};
  return;
}

更易读的指定初始化写法

如果想要进一步提升可读性,避免成员顺序写错的问题,可以搭配C99的指定初始化器使用:

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

高频使用可封装宏

如果项目里需要频繁初始化SDL_Rect,还可以封装工具宏进一步简化代码:

// 放在公共头文件中
#define SDL_RECT_INIT(x_, y_, w_, h_) ((SDL_Rect){.x = (x_), .y = (y_), .w = (w_), .h = (h_)})

// 调用处代码
gfx.rect = SDL_RECT_INIT(0, 0, 1280, 720);

原写法报错原因

纯花括号{}初始化列表只能在变量声明阶段使用,赋值操作时编译器不认可裸花括号作为合法的右值,加上类型前缀(SDL_Rect)后就会被识别为复合字面量,属于合法的右值表达式。

内容的提问来源于stack exchange,提问作者cvt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:24:04