MPLAB:XC8:无法分配结构变量
MPLAB: XC8: Cannot assign struct variable
我正在尝试使用 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 架构的某些内容?
看来我对C的了解不如我想象的那么好;以下 post 阐明了我面临的问题:
修改后的代码如下:
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 开始就支持扩展的初始列表,默认情况下是启用的。
我正在尝试使用 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 架构的某些内容?
看来我对C的了解不如我想象的那么好;以下 post 阐明了我面临的问题:
修改后的代码如下:
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 开始就支持扩展的初始列表,默认情况下是启用的。