【问题标题】:How do I initialize a struct using the new C99 syntax?如何使用新的 C99 语法初始化结构?
【发布时间】:2015-04-13 04:07:51
【问题描述】:

我正在尝试使用新的 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)”,它编译得很好。除了一些语法上的丑陋(如果你对此有一些建议,我会很感激),我看不出我缺少什么。

我做错了什么?

【问题讨论】:

    标签: c struct c99


    【解决方案1】:
    (*window) = { .window = sdlWindow,
                  .position = { .x = x,
                                .y = y }};
    

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

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

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

    【讨论】:

    • 当然,OP也可以写SWindow window = { .window = sdlWindow,
    猜你喜欢
    • 2015-10-30
    • 2016-08-13
    • 2020-10-08
    • 2013-05-29
    • 2014-10-12
    • 2013-04-19
    • 1970-01-01
    • 2021-05-26
    • 2014-07-03
    相关资源
    最近更新 更多