Перейти к содержанию
    

Привдите пример хорошо написанного встроенного софта

А как отличить хорошую программу от плохой ? Плохая будет кусаться и ругаться матом ?

Плохая программа - с недальновидной концепцией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что Вы понимаете под программной с "недальновидной концепцией" ? Можно несколько примеров ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы написали ерунду, а все это пропустили мимо. Это не стиль, а формат документа.

Ну зачем так сразу "Вы написали ерунду"...??

Я написал что думаю, а именно считаю постановку скобок именно частью стиля..

Почитайте Макконела "Совершенный Код".. там много чего интересного на эту тему написано, правда не претендую на принципиальность сего момента до мозга костей.. :) так, к сведению..

 

В том же Code::Blocks можно отформатить как угодно любой исходник.

Не знаю как ваш Code::Blocks, никогда в нем не работал..

А вот вам пример уважаемого редактора SLickEdit, что они понимают под словом "style" (в т.ч.)..

post-23832-1237912830_thumb.jpg

 

P.S. Хороший стиль - понятие весьма растяжимое, но когда он присутствует, это сразу заметно..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Один из лично мне понравившихся стилей написания (не как скобочки форматировать,

С такими "скобочками" исходники у меня сразу в форматер попадают перед чтением - у меня здоровья не хватить лицезреть такое форматирование :(. Особенно "радует" выпендреж с табуляциями и парой пробелов в одном флаконе... Такие

    
while ( p != endfn ) putc(*p, out), p++;

изыски тоже расстраивают своей никчемностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С такими "скобочками" исходники у меня сразу в форматер попадают перед чтением - у меня здоровья не хватить лицезреть такое форматирование .

 

Я же специально обратил внимание, что не в форматировании дело. Табуляции, скобочки и прочее - это достаточно интимные пристрастия, при необходимости - переформатируется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я же специально обратил внимание, что не в форматировании дело. Табуляции, скобочки и прочее - это достаточно интимные пристрастия, при необходимости - переформатируется.

а это чудо:

putc(*p, out), p++;

зачем так писать, ведь можно

putc(*p++, out);

 

while ( p != endfn ) putc(*p, out), p++;

Несколько разношерстных операторов в одной строке - обычно пишут люди которые не знают, что такое пошаговая отладка. Вот сами скажите, как при использовании такого стиля поставить точку останова на putc, а не на while( p != endfn)

 

ну и ...

GLOBAL(void)
jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables)
{

тип с маленькой буквы, и не в начале а в конце пишется, что этот тип - указатель. Плохо читаемо, не видно где типы, а где переменные.

Природа переменных не понятна по их имени - т.е. сам указатель, тобиш cinfo в данном случае, никак не показывает, что он указатель, а не экземпляр....

Докучи в исходниках еще и все коментарии с "/*" - клиника.

короче стиль imho очень далек от идеала.

 

Я бы предпочел хотя бы так:

void JPEG_StartCompress( PJPEG_COMPRESS pCompressInfo, BOOL write_all_tables)
{

По крайней мере так легко можно сразу отличить функции от типов, типы от переменных, структуры от указателей на структуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы посмотрить на исходники действительно качественно написанного софта (в особенности на C и для встроенных применений).

...ядро minix3 с комментами на русском. Нельзя сказать, что шедевр, но хороший пример того, сколько и где нужно комментариев чтобы человек прочитавший дополнительно книгу на 600 страниц за вами что-нибудь понял :biggrin: . Есть еще UNIX V6 в комментах на англицом. Тоже шедевр без которого эта ОС вряд ли бы получила такое распространение. Кстати, насколько помню, именно с "зажатия" этой книжицы началась история BSD.

 

А словом "встроенные применения" не кидайтесь - это сейчас манечка кадровых агенств. Берете материнку VIA, лепите к ней эранчеГ, ставите XP и запитываете все от батареек - и вот оно - "встроенное применение". А еще "встроенное" бывает и на asm, и на FORTH и на FPGA(бу-га-га-га-га :biggrin: )

Может у вас бывало такое - читаешь прогу и понимаешь - да, это очень хорошо написанно. Хочется поучится на чужом хорошем примере.

ммм...нет :07: . Даже не представляю себе такого. src это все-таки не литература. Для меня программирование это посредник меду миром идей и реальной жизнью, оно не может быть самодостаточно.

 

Кстати о стиле - наверное я бы назвал стилем

1) программирования разбиение задачи на функции(для языка C) - архитектурный стиль,

2) применение языковых конструкций(терпеть не могу "олимпиадного" стиля программирования - это тупо) - синтаксический стиль

3) использование имен переменных, функций и нотаций - на порядок может облегчить "вникание в проект" - стиль оформления.

 

А уж никак не форматирование...

Но раз уж форматирование таки затронуто попугаю людей и я.

 

Все исходники форматирую утилитой AStyle стиль GNU. Она отлично работает и рекурсивно - отформатит любой по сложности проект. :) Правда я извращенец, сознаюсь :rolleyes: , определения функций у меня выглядят так

 

/*============================================================================*/
/*
идея алгоритма помещенного в функцию в очень развернутом виде. Может кому-то 
легко потом "наглаз парсить" исходник кем-то когда-то написанного адаптивного 
фильтра, например, то мне даже свой бывает тяжело понять. А я не верю, что можно 
использовать исходник не понимая идею туда помещенную. Имеется ввиду другим 
программистом, а не для того чтобы собрать приложение если нет rpm, разумеется.
*/
fn_foo                                                        /* идея кратко, идет потом в .h */
(
type arg,                                                        /* это аргумент отвечающий за "a" */
type brg,                                                        /* это аргумент отвечающий за "b" */
type crg,                                                        /* это аргумент отвечающий за "c" */
...
)
/*----------------------------------------------------------------------------*/
{
  bla-bla-bla;                                                           /* 1 */
/*----------------------------------------------------------------------------*/
  blo-blo-blo;                                                           /* 2 */
}
/* 1 - ая сноска  */
/* 2 - ая сноска */

 

И чем ближе к основной функции тем больше нотации, использую чуть доработанную

венгерскую (что бы там не пищали линуксоиды-в-вере). Очень неплохо иногда

понимать передаешь ли ты(она, она, оно, они) указатель на указатель или массив массивов

- прямо из названия переменной.

 

Да, выглядит дико :rolleyes: . Но... очень хорошо читается даже через годы, и очень быстро позволяет в

"нажитое непосильным трудом" вникать. Но это только "свое". Чужое я так не коверкаю,

разве только то, что уж очень подробно разбираю - т.е. нужны внутренности, а не просто вызов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

while ( p != endfn ) putc(*p, out), p++;

Несколько разношерстных операторов в одной строке - обычно пишут люди которые не знают, что такое пошаговая отладка. Вот сами скажите, как при использовании такого стиля поставить точку останова на putc, а не на while( p != endfn)

 

Вот прицепились вы все к этой строчке :) Для любителей пошаговой отладки такого кода два раза нажимаем enter и получаем

while ( p != endfn ) 
putc(*p, out), 
p++;

 

Короче, мне нравится. А точка зрения - она как дырка в дупе, у каждого своя :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю как ваш Code::Blocks, никогда в нем не работал..

А вот как:

post-33646-1238138262_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлю, что code::block просто использует утилитку ASyle которая живет и сама по себе и во множестве других сред и приложений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а это чудо:

putc(*p, out), p++;

зачем так писать, ведь можно

putc(*p++, out);

Я знаю зачем так писать. Вероятно это программа для Кейла, а он кодирует постинкремент очень неэффективно. Но достаточно инкремент вынести в отдельное выражение и код становится в три раза короче. Так что не надо заранее считать всех идиотами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вероятно это программа для Кейла

 

Чернила для восьмого класса :)

 

Это кроссплатформенная библиотека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм, на EDN нас услышали. Секреты технологии bug-killing! т.е. предлагаю новый критерий "хорошести" кода

 

http://www.embedded.com/216200567?cid=NL_embedded

 

 

 

Чернила для восьмого класса :)

 

Это кроссплатформенная библиотека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чернила для восьмого класса :)

Не смешно.

Это кроссплатформенная библиотека.

Значит разработчики этой библиотеки знали об особенностях Кейла и сделали так, чтобы и он генерил эффективный код - а другие от отделения инкремента хуже код не сделают. И библиотека стала действительно (а не теоретически) кроссплатформенной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...