首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPLAB: XC8:无法为结构变量赋值

MPLAB: XC8:无法为结构变量赋值
EN

Stack Overflow用户
提问于 2019-02-06 02:59:51
回答 1查看 509关注 0票数 0

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

代码如下:

代码语言:javascript
复制
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;
}

这会产生以下错误:

代码语言:javascript
复制
newmain.c:11:20: error: expected expression
        array[i] = {0, 0};

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

如果我将代码更改为下面的代码,错误就会消失。

代码语言:javascript
复制
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版。这是一个bug,还是我忽略了一些关于PIC架构的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-06 03:17:11

看起来我并不像我想的那样了解C语言;下面的帖子澄清了我面临的问题:Struct initialization in C with error: expected expression

更正后的代码如下:

代码语言:javascript
复制
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开始就支持扩展的初始值列表,默认情况下是启用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54541304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档