如何使用新的C99语法初始化结构?

时间:2015-04-13 04:07:52

标签: c struct c99

我正在尝试使用新的C99初始化语法初始化结构。但是,每当我编译设置如下的代码时,我收到编译错误“GCC 4.9.2中'{'token'之前的预期表达式:

// *.h file
typedef struct
{
   int x;
   int y;
} SPoint;

typedef struct
{
   SDL_Window* window;
   SPoint position;
} SWindow;

// *.c file
SWindow* create(int x, int y) {
SWindow* window = malloc(sizeof(SWindow));
// snip
(*window) = { .window = sdlWindow,
              .position = { .x = x,
                            .y = y }};
// snip

如果我在初始化程序前添加“(SWindow)”,它编译得很好。除了一些语法上的丑陋(如果你对此有一些建议,我会很感激),我不会看到我所缺少的。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

(*window) = { .window = sdlWindow,
              .position = { .x = x,
                            .y = y }};

不是初始化。这是任务。使用

(*window) = (SWindow) { .window = sdlWindow,
                        .position = { .x = x,
                                      .y = y }};

您要求编译器创建一个临时对象,然后使用临时对象进行分配。