如何使用新的 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 }};
你要求编译器创建一个临时对象,然后使用临时对象进行赋值。
我正在尝试使用新的 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 }};
你要求编译器创建一个临时对象,然后使用临时对象进行赋值。