我正在尝试使用新的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)”,它编译得很好。除了一些语法上的丑陋(如果你对此有一些建议,我会很感激),我不会看到我所缺少的。
我做错了什么?
答案 0 :(得分:1)
(*window) = { .window = sdlWindow,
.position = { .x = x,
.y = y }};
不是初始化。这是任务。使用
(*window) = (SWindow) { .window = sdlWindow,
.position = { .x = x,
.y = y }};
您要求编译器创建一个临时对象,然后使用临时对象进行分配。