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

How do I initialize a struct using the new C99 syntax?

我正在尝试使用新的 C99 初始化语法来初始化结构。但是,每当我编译这样设置的代码时,我都会从 GCC 4.9.2 收到编译错误 "expected expression before '{' 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)”,它可以正常编译。除了一些语法上的丑陋(如果您对此有一些建议,我将不胜感激),我看不出我缺少什么。

我做错了什么?

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

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

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

你要求编译器创建一个临时对象,然后使用临时对象进行赋值。