fk0, легенда (04.10.2013 12:32, просмотров: 224) ответил илья на Пример можно?
См. ссылку. Проблема носит массовый характер и не надо притворятся, что её нет. Тем более, проблема не только эта. Конкретно в моём случае такой вариант: https://www.google.com/search?q=can%27t+generate+code+site:microchip.com
/// file.c:
#include "header1.h"
#include "header2.h"
/// header1.h
#ifndef MACRO // ошибка т.к. MACRO "забыл"
...
declaration;
...
#define MACRO
#endif
/// header2.h
#ifndef MACRO2
#include "header1.h" // здесь ошибка duplicate declaration
...
#define MACRO2
#endif
Тратить час времени на воспроизведение и документирование не буду, потому, что в микрочипе не к кому обратиться, чтоб тебя не послали нахуй. Даже в мире опенсоурс можно было написать в рассылку и получить хоть какой-то ответ. Да, код проверен несколькими компиляторами на других платформах. Так что отсылки к говнокоду не принимаются. ANSI C89 он соответствует. А XC8 -- нет. Версия -- последняя на начало сентября 2013г.
Вторая проблема, can't generate code, она вообще не имеет никакого способа её обойти. "перепишите по-проще" -- это не ответ. Я переписал. До уровня x=y. Не работает. Проблема в том, что компилятор сам для себя не может распределить регистры/память в некоторых случаях. Она встречается и в STD версии, кстати, но редко и действително выправляется переписыванием через упрощение с ручным введением временных переменных. Для PRO/XC8 такое не прокатывает (x=y не работает).
[ZX]