MPLAB:XC8:无法分配结构变量

时间:2019-02-05 18:59:51

标签: mplab xc8

我正在尝试使用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架构的某些内容?

1 个答案:

答案 0 :(得分:0)

看起来我对C的了解不如我所想;以下帖子阐明了我面临的问题:Struct initialization in C with error: expected expression

更正后的代码如下:

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以来,它已支持扩展的初始化列表。

相关问题