-Поиск по дневнику

Поиск сообщений в ИнтеллиХент

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.06.2006
Записей:
Комментариев:
Написано: 117


Софтверная кунсткамера

Вторник, 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(); /* Модуль начальной установки */
}
}
}


=====================================

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;
}"

Только в таком случае индекс массива действительно становится нулевым, а не хрен знает каким. :(

Ну, и переходы по меткам - они, конечно, ужасны, но в условиях дефицита места в ПЗУ иногда рулят, код становится заметно компактнее...
Ответить С цитатой В цитатник
ИнтеллиХент   обратиться по имени Да тут даже не в метках дело... Понедельник, 23 Апреля 2007 г. 10:01 (ссылка)
...а в их использовании. Вообще, _иногда_ (в весьма редких случаях) без меток действительно не обойтись. Но случаев таких - единицы. А вот то, что переход по метке выполняется _внутрь_ конструкции if..else, причем даже не сразу за операторную скобку, а внутрь фрагмента - это уже мина, заложенная в систему. Упаси аллах что-нибудь в этой программе поменять - взорвется в воздухе! Не случайно фирма, которая ЭТО писала, отказывается от изменений всеми возможными способами...
Ответить С цитатой В цитатник
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку