Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Недавно смотрел исходные тексты на сайте довольно-таки известного производителя и увидел следующий код
Мне трудно поверить, что больше нигде в программе не будет ни одного обращения к этому регистру
После того, как Вы полчаса будете смотреть на свой код через пол-года после написания с мучительными мыслями «А что я имел в виду, когда переворачивал этот бит в этой одной строке?
*(unsigned int *)0xf80ff000 &= 0xffffefff;это скорее всего копипаста из какого-то низкоуровневого мануала.
RegBitClr(CsrReg,3); // тут предупреждения компилятора
Перейти же к настоящим функция мы не можем, поскольку inline не является в C директивой компилятора (ну, по крайней мере, так в моей версии IAR, хотя я вроде это победил при помощи прагмы — костыли, повсюду костыли), а вызывать настоящую функцию для сброса бита будет весьма накладно
enum e {e1};
int fake_fnc(int* a, enum e v); // тела для функции не нужно, т.к. она никогда не вызывается
#define DO_STUFF(a,v) (*(a)=(v),1||fake_fnc(a,v))
void main(void)
{
int z;
DO_STUFF(&z, 1); // тут в случае C++ у нас будет ошибка
DO_STUFF(&z, e1);
}
К вопросу о стиле программирования