MPLAB: XC8: невозможно назначить переменную структуры
Я пытаюсь скомпилировать следующий код в MPLab v5.10, используя XC8 для PIC18.
Код выглядит следующим образом:
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 ответ
Похоже, я не знаю С так хорошо, как я думал; Следующий пост проясняет проблему, с которой я столкнулся: Инициализация структуры в 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. Выбор C90 из MPLAB подтверждает это (приведенный выше код не компилируется в C90).
Что касается кода, работающего на моей машине, я фактически использовал g++, который поддерживает расширенные списки инициалов начиная с C++11, который включен по умолчанию.