【问题标题】:MPLAB: XC8: Cannot assign struct variableMPLAB:XC8:无法分配结构变量
【发布时间】:2019-02-05 18:59:50
【问题描述】:

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

【问题讨论】:

    标签: mplab xc8


    【解决方案1】:

    看起来我并不像我想象的那样了解 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 开始的扩展初始值列表,默认启用。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2011-08-02
      • 2014-08-20
      • 2018-12-29
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多