为什么我不能使用花括号{}分配结构变量?

时间:2014-07-26 06:18:49

标签: c debugging sdl-2

我有以下代码,为什么Visual Studio位于{中的第一个括号playerObj.cropImg = { 0, 0, 45, 32 };下面并在编译时返回错误error C2059: syntax error : '{'

#include <SDL.h>
#include <stdio.h>

typedef struct obj
{
    SDL_Surface *pSprite;
    SDL_Texture *pTexture;
    SDL_Rect cropImg;
    SDL_Rect pos;
} obj;

obj playerObj;

void playerObj_init(unsigned char * filename, SDL_Renderer * pRenderer)
{
    playerObj.cropImg = { 0, 0, 45, 32 };
}

1 个答案:

答案 0 :(得分:3)

您的代码尝试分配

初始化是指为变量提供值作为声明的一部分。

分配是指为已存在的变量提供新值;这发生在语句(不是声明)中。

在C90中,大括号括起的初始值设定项只能用于声明。在C99中,您可以使用struct类型的文字,但是您必须将类型指定为语法的一部分(编译器尝试推导它会太复杂):

playerObj.cropImg = (SDL_Rect) { 0, 0, 45, 32 };

在C90中有效的另一种方法是写:

SDL_Rect const newRect = { 0, 0, 45, 32 };
playerObj.cropImg = newRect;

并且编译器应该优化它。

NB。考虑使用指定的初始化程序来帮助实现代码可维护性。在任何一种情况下,

 { .w = 45, .h = 32 }