0

我正在尝试使用 XC8 为 PIC18 在 MPLab v5.10 中编译以下代码。

代码如下:

struct vec2i {
    int x;
    int y;
};

void main(void) {
    static struct vec2i array[10];

    int i;
    for(i = 0; i < 10; ++i) {
        array[i] = {0, 0};
    }

    return;
}

这会产生以下错误:

newmain.c:11:20: error: expected expression
        array[i] = {0, 0};

这段代码在我的本地 gcc 编译器上编译得很好。

如果我将代码更改为以下内容,错误就会消失。

struct vec2i {
    int x;
    int y;
};

void main(void) {
    static struct vec2i array[10];

    int i;
    for(i = 0; i < 10; ++i) {
        // array[i] = {0, 0};
        array[i].x = 0;
        array[i].y = 0;
    }

    return;
}

我正在使用 XC8 的免费版本,版本 2.05。这是一个错误,还是我忽略了有关 PIC 架构的某些内容?

4

1 回答 1

0

看起来我不像我想象的那样了解C;以下帖子阐明了我面临的问题:C 中的结构初始化错误:预期表达式

更正后的代码如下:

struct vec2i {
    int x;
    int y;
};

void main(void) {
    static struct vec2i array[10];

    int i;
    for(i = 0; i < 10; ++i) {
        array[i] = (struct vec2i){0, 0};
    }

    return;
}

请注意,这种解决方法仅在 C99 下可用。从 MPLAB 中选择 C90 可以验证这一点(上述代码在 C90 下编译失败)。

至于在我的机器上运行的代码,我实际上使用的是 g++,它支持自 c++11 以来的扩展初始值列表,默认情况下启用。

于 2019-02-05T19:17:10.937 回答