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
相关产品推荐
相关产品推荐

