2 TMX
Цитата
компилятор вообще-то компилирует каждый файл по отдельности, ничего не зная о том,какие макросы уже определены в других файлах.
Поэтому и ругается.
В файле main.c (и только в нем) должно быть определение до включения файла globals.h
Да - да - да, я как раз вчера вечером это выяснил методом проб и ошибок.
Цитата
Насчет файла globals.h в учебниках пишут прямо противоположное, я в своем стандарте оформления кода требую его использовать в виде, описанном выше.
#ifndef пишется, чтобы не было переопределения макросов в случае вложения заголовочных файлов.
вот теперь начинаю понимать, а то как-то смысл #ifndef терялся.
2 Old1
Цитата
и должно заработать

Да спасибо, заработало. Осталось понять в чем мой просчет.
Попробую 2 варианта и тогда уже определюсь.
2 All
Извиняйте если кто пытался тоже обьяснить, но дошло только счас...
Вот перевожу свои библиотеки с AB, и возникли еще вопросы:
Первый.
В С нет сдвига через перенос. Как быть?
Я вижу 3 возможных варианта
1
например нужно сделать <a<< и проверить Carry
делаем так:
b = a;
a = a << 1;
и проверяем
if (a>b) то переноса не было
else
перенос был.
2.
второй вариант преобразовать её в int
и проверять как Carry 8 бит
3.
Вставка на асме.
1 и 2 варианты не очень нравятся за счет использования дополнительного регистра
а 3 как то не хочется так как будет потеря совместимости. Да и описание по совместимости какое-то туманное.. Что -то сказали, о чем-то умолчали....
Макросы типа __xxx вроде ненашел...
как быть в данном случае. ??
2 Вопрос.
У меня есть несколько Case()
в некоторых из них код повторяется. В асме это выглядело через rjmp
в С вроде токага безобразия лучьше не делать
Тогда опять же как лучьше.
Вижу 2 варианта
1 макросом
2 функцией
в первом случае большой код
во втором лишние call и ret, да еще сохранение в стек.
Сохранение стек можно отключить __task (наверное) но call и ret ...
или может inline rfr-nj поможет ??