_Pasha 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба А как отличить хорошую программу от плохой ? Плохая будет кусаться и ругаться матом ? Плохая программа - с недальновидной концепцией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба А что Вы понимаете под программной с "недальновидной концепцией" ? Можно несколько примеров ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
legotron 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Вы написали ерунду, а все это пропустили мимо. Это не стиль, а формат документа. Ну зачем так сразу "Вы написали ерунду"...?? Я написал что думаю, а именно считаю постановку скобок именно частью стиля.. Почитайте Макконела "Совершенный Код".. там много чего интересного на эту тему написано, правда не претендую на принципиальность сего момента до мозга костей.. :) так, к сведению.. В том же Code::Blocks можно отформатить как угодно любой исходник. Не знаю как ваш Code::Blocks, никогда в нем не работал.. А вот вам пример уважаемого редактора SLickEdit, что они понимают под словом "style" (в т.ч.).. P.S. Хороший стиль - понятие весьма растяжимое, но когда он присутствует, это сразу заметно.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба Один из лично мне понравившихся стилей написания (не как скобочки форматировать, С такими "скобочками" исходники у меня сразу в форматер попадают перед чтением - у меня здоровья не хватить лицезреть такое форматирование :(. Особенно "радует" выпендреж с табуляциями и парой пробелов в одном флаконе... Такие while ( p != endfn ) putc(*p, out), p++; изыски тоже расстраивают своей никчемностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 24 марта, 2009 Опубликовано 24 марта, 2009 · Жалоба С такими "скобочками" исходники у меня сразу в форматер попадают перед чтением - у меня здоровья не хватить лицезреть такое форматирование . Я же специально обратил внимание, что не в форматировании дело. Табуляции, скобочки и прочее - это достаточно интимные пристрастия, при необходимости - переформатируется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Я же специально обратил внимание, что не в форматировании дело. Табуляции, скобочки и прочее - это достаточно интимные пристрастия, при необходимости - переформатируется. а это чудо: 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) { По крайней мере так легко можно сразу отличить функции от типов, типы от переменных, структуры от указателей на структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Хотелось бы посмотрить на исходники действительно качественно написанного софта (в особенности на C и для встроенных применений). ...ядро minix3 с комментами на русском. Нельзя сказать, что шедевр, но хороший пример того, сколько и где нужно комментариев чтобы человек прочитавший дополнительно книгу на 600 страниц за вами что-нибудь понял . Есть еще UNIX V6 в комментах на англицом. Тоже шедевр без которого эта ОС вряд ли бы получила такое распространение. Кстати, насколько помню, именно с "зажатия" этой книжицы началась история BSD. А словом "встроенные применения" не кидайтесь - это сейчас манечка кадровых агенств. Берете материнку VIA, лепите к ней эранчеГ, ставите XP и запитываете все от батареек - и вот оно - "встроенное применение". А еще "встроенное" бывает и на asm, и на FORTH и на FPGA(бу-га-га-га-га ) Может у вас бывало такое - читаешь прогу и понимаешь - да, это очень хорошо написанно. Хочется поучится на чужом хорошем примере. ммм...нет :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: . Но... очень хорошо читается даже через годы, и очень быстро позволяет в "нажитое непосильным трудом" вникать. Но это только "свое". Чужое я так не коверкаю, разве только то, что уж очень подробно разбираю - т.е. нужны внутренности, а не просто вызов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба while ( p != endfn ) putc(*p, out), p++; Несколько разношерстных операторов в одной строке - обычно пишут люди которые не знают, что такое пошаговая отладка. Вот сами скажите, как при использовании такого стиля поставить точку останова на putc, а не на while( p != endfn) Вот прицепились вы все к этой строчке :) Для любителей пошаговой отладки такого кода два раза нажимаем enter и получаем while ( p != endfn ) putc(*p, out), p++; Короче, мне нравится. А точка зрения - она как дырка в дупе, у каждого своя Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Не знаю как ваш Code::Blocks, никогда в нем не работал.. А вот как: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DRUID3 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Добавлю, что code::block просто использует утилитку ASyle которая живет и сама по себе и во множестве других сред и приложений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба любой лоадер, например bios-lt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба а это чудо: putc(*p, out), p++; зачем так писать, ведь можно putc(*p++, out); Я знаю зачем так писать. Вероятно это программа для Кейла, а он кодирует постинкремент очень неэффективно. Но достаточно инкремент вынести в отдельное выражение и код становится в три раза короче. Так что не надо заранее считать всех идиотами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба Вероятно это программа для Кейла Чернила для восьмого класса :) Это кроссплатформенная библиотека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба Хм, на EDN нас услышали. Секреты технологии bug-killing! т.е. предлагаю новый критерий "хорошести" кода http://www.embedded.com/216200567?cid=NL_embedded Чернила для восьмого класса :) Это кроссплатформенная библиотека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 1 апреля, 2009 Опубликовано 1 апреля, 2009 · Жалоба Чернила для восьмого класса :) Не смешно. Это кроссплатформенная библиотека. Значит разработчики этой библиотеки знали об особенностях Кейла и сделали так, чтобы и он генерил эффективный код - а другие от отделения инкремента хуже код не сделают. И библиотека стала действительно (а не теоретически) кроссплатформенной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться