Вторник, 17 Апреля 2007 г. 09:46
+ в цитатник
Разгребая завалы всякого инфо-хлама на компе, наткнулся на старые исходники, принесенные мне в свое время на анализ. Итак, перед вами - НЕ упражнения блондинки - второкурсницы, а код, написанный профессионалом. Причем, это НЕ офисное приложение, а кусок системы автоматического управления газотурбинным двигателем ПС-90. Аналогичные двигатели стоят на самолете Ил-96-300 ВВП (Борт №1 Имперского Флота). Вашему вниманию предлагается маленький фрагмент чудесной системы, дающий достаточно хорошее представление о квалификации "авторов". Мои комментарии выделены так: *** текст ***. Остальное - авторский синтаксис и оформление.
Для тех, у кого нервы выдержат просмотр исходного кода ниже, вот ссылка на целую коллекцию уродцев:
http://www.liveinternet.ru/showjournal.php?journalid=1103657&keywordid=192188
Итак, барабанная дробь:
===========================
code:
void apd(void)
{
if (Mnu_svk==1) *** Прошу заметить, что Mnu_svk - логическая переменная по своей сути. Не написать if( Mnu_svk ) ??? ***
{
DlTr=0;
if (Ntk<400)
Aldi_o=0;
goto L1_M14; *** здесь и далее немало переходов по меткам, причем внутрь оператора if ***
}
if (Mok==1)
goto L1_M14;
if (Mus==0)
{
Aldi_o=40;
L1_M14: /* Метка L1_M14 */ *** замечательный комментарий к не менее замечательному имени метки ***
Mzap=0;
Mghp=0;
Mhp=0;
Mpzap=0;
Mgzap=0;
Mz=0;
goto L2_M26;
}
if ((Mastop_sau==1)||(Mstop_sau==1)||(Mpzap_svk==1)) *** а скобок-то, скобок!!! И это опять логические переменные! Впрочем, при такой манере программизма не удивлюсь, если в другом месте переменным присваивается что угодно, кроме 1. Так что подстраховка не лишняя :) ***
{
Mpzap=1;
Mao_as=1;
}
else
Mpzap=0;
if (Mz==0)
{
if ((Aldi>3)||(OT_Ptgpd==1)) *** Отделять пробелами мы не умеем. Интересно, а по-русски человек случайно не пишет "досвидания,дорогойдруг"? ***
{
Mutg=0;
Mutnk=1;
}
else
{
if (Ptgpd>6)
{
Mutg=1;
Mutnk=0;
}
else
{
Mutg=0;
Mutnk=0;
goto L2_M21;
}
}
if ((Mzap==0)&&(Mhp==1))
Mpzap=1;
}
L2_M21: /* Метка L2_M21 */
if (Mhp==1)
hpd(); /* Модуль холодной прокрутки двигателя */
else
{
if (Mzap==1)
zapusk(); /* Модуль запуска двигателя */
else
{
oprishus(); /* Модуль определения исходных условий */
L2_M26: /* Метка L2_M26 */
nachust(); /* Модуль начальной установки */
}
}
}
=====================================
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-
avis_avis обратиться по имени
Воскресенье, 22 Апреля 2007 г. 10:46 (ссылка)
Даааа... Особенно умиляют имена меток и прям-таки обилие комментариев :) У меня начальник примерно так пишет. А я его проги переписываю под свой объект...
Хотя есть некоторые моменты - к примеру, phyton'овский компилятор С для MCS196 может упасть на ровном месте - из-за присутствия или отсутствия пробела или перевода строки где-нибудь... Или, к примеру связка этого компилятора с контроллером 1874ВЕ36 глючит от конструкции вида
"{
unsigned char I;
......
I = 0;
massiv[I] = 10;
}"
Требуется написать
"{
unsigned int I;
......
I &= 0x0000;
massiv[I] = 10;
}"
Только в таком случае индекс массива действительно становится нулевым, а не хрен знает каким. :(
Ну, и переходы по меткам - они, конечно, ужасны, но в условиях дефицита места в ПЗУ иногда рулят, код становится заметно компактнее...
Ответить С цитатой В цитатник