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, который включен по умолчанию.

Другие вопросы по тегам