Цитата(ivainc1789 @ Feb 8 2010, 10:54)

В девайсах ATtiny иногда приходится сильно экономить память программ и использовать макросы.
Непонятно, как именно вообще макросы могут сэкономить память программ (или вообще какую-нибудь память). И как ваши конкретные макросы её экономят.
1) Макросы - сокращение от макроподстановки. Они могут сэкономить только текст программы. То есть облегчить её написание либо восприятие.
2) Текст программы на Си не то же самое, что результирующий код. Иными словами более короткий текст программы может скомпилироваться в более длинную программу или менее эффективную.
3) Насколько я вижу ваши макросы наоборот сильно расходуют, а не экономят память программ. Хотя - может так задумывалось. Я не уверен, понимаете ли вы разницу в выборе на момент компиляции и на момент исполнения? Дело в том,что независимо от аргумента ваша фича скомпилируется в кучу операторов. Другое дело, что компилятор может часть убрать на этапе оптимизации. Тем не менее можно с помощью тех же макросов сделать запись более наглядной и, препроцессор сгенерит лишь один оператор (или часть).
Ну например:
Код
#if ADC_REFS == REF_VCC
#define ADC_REF_USE (0<<REFS0)
#elif ADC_REFS == REF_EXT
#define ADC_REF_USE (1<<REFS0)
....
#endif
....
....
ADMUX = ADC_REF_USE | TekChanal; // скомпилируется в 2 команды ldi-out