|
|
  |
Привдите пример хорошо написанного встроенного софта |
|
|
|
Mar 24 2009, 16:46
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Цитата(_Pasha @ Mar 24 2009, 12:04)  Вы написали ерунду, а все это пропустили мимо. Это не стиль, а формат документа. Ну зачем так сразу "Вы написали ерунду"...?? Я написал что думаю, а именно считаю постановку скобок именно частью стиля.. Почитайте Макконела "Совершенный Код".. там много чего интересного на эту тему написано, правда не претендую на принципиальность сего момента до мозга костей..  так, к сведению.. Цитата(_Pasha @ Mar 24 2009, 12:04)  В том же Code::Blocks можно отформатить как угодно любой исходник. Не знаю как ваш Code::Blocks, никогда в нем не работал.. А вот вам пример уважаемого редактора SLickEdit, что они понимают под словом " style" (в т.ч.)..
P.S. Хороший стиль - понятие весьма растяжимое, но когда он присутствует, это сразу заметно..
|
|
|
|
|
Mar 24 2009, 18:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Rst7 @ Mar 24 2009, 12:33)  Один из лично мне понравившихся стилей написания (не как скобочки форматировать, С такими "скобочками" исходники у меня сразу в форматер попадают перед чтением - у меня здоровья не хватить лицезреть такое форматирование  . Особенно "радует" выпендреж с табуляциями и парой пробелов в одном флаконе... Такие Код while ( p != endfn ) putc(*p, out), p++; изыски тоже расстраивают своей никчемностью.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 27 2009, 02:07
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Rst7 @ Mar 24 2009, 22:16)  Я же специально обратил внимание, что не в форматировании дело. Табуляции, скобочки и прочее - это достаточно интимные пристрастия, при необходимости - переформатируется. а это чудо: Код 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) { По крайней мере так легко можно сразу отличить функции от типов, типы от переменных, структуры от указателей на структуры.
|
|
|
|
|
Mar 27 2009, 06:42
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(BSVi @ Mar 23 2009, 09:35)  Хотелось бы посмотрить на исходники действительно качественно написанного софта (в особенности на C и для встроенных применений). ...ядро minix3 с комментами на русском. Нельзя сказать, что шедевр, но хороший пример того, сколько и где нужно комментариев чтобы человек прочитавший дополнительно книгу на 600 страниц за вами что-нибудь понял  . Есть еще UNIX V6 в комментах на англицом. Тоже шедевр без которого эта ОС вряд ли бы получила такое распространение. Кстати, насколько помню, именно с "зажатия" этой книжицы началась история BSD. А словом "встроенные применения" не кидайтесь - это сейчас манечка кадровых агенств. Берете материнку VIA, лепите к ней эранчеГ, ставите XP и запитываете все от батареек - и вот оно - "встроенное применение". А еще "встроенное" бывает и на asm, и на FORTH и на FPGA(бу-га-га-га-га  ) Цитата(BSVi @ Mar 23 2009, 09:35)  Может у вас бывало такое - читаешь прогу и понимаешь - да, это очень хорошо написанно. Хочется поучится на чужом хорошем примере. ммм...нет  . Даже не представляю себе такого. src это все-таки не литература. Для меня программирование это посредник меду миром идей и реальной жизнью, оно не может быть самодостаточно. Кстати о стиле - наверное я бы назвал стилем 1) программирования разбиение задачи на функции(для языка C) - архитектурный стиль, 2) применение языковых конструкций(терпеть не могу "олимпиадного" стиля программирования - это тупо) - синтаксический стиль 3) использование имен переменных, функций и нотаций - на порядок может облегчить "вникание в проект" - стиль оформления. А уж никак не форматирование... Но раз уж форматирование таки затронуто попугаю людей и я. Все исходники форматирую утилитой AStyle стиль GNU. Она отлично работает и рекурсивно - отформатит любой по сложности проект.  Правда я извращенец, сознаюсь  , определения функций у меня выглядят так Код /*============================================================================*/ /* идея алгоритма помещенного в функцию в очень развернутом виде. Может кому-то легко потом "наглаз парсить" исходник кем-то когда-то написанного адаптивного фильтра, например, то мне даже свой бывает тяжело понять. А я не верю, что можно использовать исходник не понимая идею туда помещенную. Имеется ввиду другим программистом, а не для того чтобы собрать приложение если нет rpm, разумеется. */ fn_foo /* идея кратко, идет потом в .h */ ( type arg, /* это аргумент отвечающий за "a" */ type brg, /* это аргумент отвечающий за "b" */ type crg, /* это аргумент отвечающий за "c" */ ... ) /*----------------------------------------------------------------------------*/ { bla-bla-bla; /* 1 */ /*----------------------------------------------------------------------------*/ blo-blo-blo; /* 2 */ } /* 1 - ая сноска */ /* 2 - ая сноска */ И чем ближе к основной функции тем больше нотации, использую чуть доработанную венгерскую (что бы там не пищали линуксоиды-в-вере). Очень неплохо иногда понимать передаешь ли ты(она, она, оно, они) указатель на указатель или массив массивов - прямо из названия переменной. Да, выглядит дико  . Но... очень хорошо читается даже через годы, и очень быстро позволяет в "нажитое непосильным трудом" вникать. Но это только "свое". Чужое я так не коверкаю, разве только то, что уж очень подробно разбираю - т.е. нужны внутренности, а не просто вызов.
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Mar 27 2009, 07:10
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата while ( p != endfn ) putc(*p, out), p++; Несколько разношерстных операторов в одной строке - обычно пишут люди которые не знают, что такое пошаговая отладка. Вот сами скажите, как при использовании такого стиля поставить точку останова на putc, а не на while( p != endfn) Вот прицепились вы все к этой строчке  Для любителей пошаговой отладки такого кода два раза нажимаем enter и получаем Код while ( p != endfn ) putc(*p, out), p++; Короче, мне нравится. А точка зрения - она как дырка в дупе, у каждого своя
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 31 2009, 09:42
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(defunct @ Mar 27 2009, 06:07)  а это чудо: Код putc(*p, out), p++; зачем так писать, ведь можно putc(*p++, out); Я знаю зачем так писать. Вероятно это программа для Кейла, а он кодирует постинкремент очень неэффективно. Но достаточно инкремент вынести в отдельное выражение и код становится в три раза короче. Так что не надо заранее считать всех идиотами.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|