Искусство программирования на Си (984073), страница 6
Текст из файла (страница 6)
Это даст вам хорошее понимание того, что представляет собой данная группа. 2. Перед тем как задать вопрос, убедитесь, что он не входит в список часто задаваемых вопросов ЕАО (Егецвеп<1у А<йес1 Ооеьбопз — Часто задаваемые вопросы. — Прим. лед ). Людям надоедает снова и снова отвсчать на один и тот жс вопрос, поэтому общие вопросы и ответы на них были собраны в олном >Уеб-узле, чтобы на них было проще ссылаться. Олнажды я залал вопрос в сотар.(апбьс о прототипе ный программный код, который демонстрирует проблему компиляции. В свое послание включите точный текст всех диагностических сообщений, выдаваемых вашим компилятором (если их о <ень много, выберите первые десяток-полтора), включая предупреждения.
Чтобы сделать это, выполняйте операции копирования и вставки: люли предпочитают отлаживать программный кол, а не исправлять ошибки набора текста. 5. Если полученный таким образом ислолный код со стороны выглядит правдоподобно, заключите сто в тело ста<ьи сразу после вашего вопроса. пересмотремнидязык а Часть 1 Войны стандартов программирования: причины и пути перемирия Резюме Ричард ХэзФилд В ЭТОЙ ГЛАВЕ С и ряд других. Существуют также группы новостей отдельно для графики, лля алгоритмов, для зт'1пгйпчз и для 1ЛЧ1Х.
Пожалуйста, задавайте только вопросы, непосредственно связанные с языком С. 5. Не бульте нетерпеливы. Вы можете получить ответ сразу, но может пройти два-три дня, пока кто-нибуль заметит ваш вопрос н даст на него ответ. Если вы пошлете тот же вопрос снова, то, скорее всего, получите в ответ что-то вроде "будьте терпеливее", а не разъяснение сути своего вопроса. 6. Не полагайтесь сразу же на первый ответ, который получите. Подождите день-другой, чтобы другие люди могли представить свои предложения.
И вскоре вы почувствуете, кто нз них говорит по делу, а кто нет. 7. В любом случае не пытайтесь поправлять кого- либо, пока на все 100% не будете уверены, что они ошибаются, а вы правы. Это рассматривается как чудовищно антиобщественное поведение. Если вы Надеюсь, что не отпугнул вас от групп новостей навсегда! В действительности все эти наставления имеют лишь общий характер. Иногда очень легко забыть, что пользователи Сзепе1 являются фактически реальными людьми, такими же, как мы с вами. Эти наставления помогут вам помнить, что они, как и мы с вами, ценят сообразительность, особенно когда вы просите их о помощи ради своей пользы.
В этой главе вы получили краткие сведения о книге, которую позволили себе приобрести. Мы объяснили, почему язык С не нуждается в еше олпом подробном описании н как С-программисты были несправедливо скованы упрощенным представлением о том, что возможно и что невозможно в этом языке. Смеем утверждать, что книга является источником переносимых методик программирования даже в высоко-платформно-зависимом миле обработки, данных ° Стили расстановки фигурных скобок ° Использование пробелов ° Структурное программирование ° Инициализация ° Статические и глобальные объекты ° Имена идентификаторов а Написание полезных комментариев ,й ' ',~' "' ';„',; Е,',1 уэ, " 'лтз..о," "э ''„Э,' "„' ' 1 ,ичь( Лересмотренннйяямн С 1 Часть ! Стиль И()(теян(т() Еая (Змее З<МаХ ЬВИ; 2++1 гоо(); Стиль 1ТВ5 чаю смо 1ТВБ является аббревиатурой стиля Опе Тпзе Вгас(пя сло Вги!Р,.вто, и'аиаьстиРнию.,гх тмиеь за,„стинмявасе!твнеиин и выяснить, какие аспекты стиля программирования яаяяются важными, а какие нам просто безразличны, и тогда, возможно, мы сможем стать посредниками в мирном урегулировании упомянутых выше войн (либо, по крайней мере, в прекращении огня).
Мы начнем с темы, близкой сердцу каждого программиста: со стилей расстановки фигурных скобок. Стили расстановки фигурных скобок Сегодня имеется четыре наиболее распространенных стиля расстановки фигурных скобок (Ьгас(пб гау!е), используемых в С-сообществе. Не сомневаюсь, что вы будете иметь свое собственное мнение о том, какой из этих стилей правильный. Но давайте рассмотрим их по очереди. Этот стиль (и последующие) занимает больше вертикального пространства, чем стиль 1ТВЗ.
Аргументом в поллержку такого стиля является тот факт, что область видимости блочного оператора ясна и визуально ассоциируется с управляющим оператором. Одно время существовал С-компилятор, который назывался %Ь((езш)г(з С. В его документации есть пример форматирования программного кода, подобного этому: Этот стиль имеет преимущество в том, что скобки более тесно ассоциируются с кодом, который они вклют и разграничивают, однако при визуальном протре текста отыскать скобки оказывается чуть более жно. Здесь приняты отступы в четыре пробела. < ивк ьвиг 3++1 ( в; к < нлх ихотв; к++1 Вое(З = Ог гог(к ( 1 от ( (в = ю; в < иах ивговт; в+я) Хог(в 0; в < НЛХ ТХНВ; и++1 ( гоо(1, к, в, п); 1 1 1 1 войн» снтндартсо нрограммнроеания: аринина и нута нейемирня Глава 2 Такая методика, безусловно, помогает избегать ошибок.
Тем не менее, многие С-программисты полагают, что она слишком громоздка. В своем собственном коде я лично стремлюсь использовать полный синтаксис блочных операторов даже в случае наличия единственного оператора, поскольку это придает коду большей ясности; во фрагментах кода в этой книге мы часто опускаем необязательные скобки, но делаем это исключительно в интересах экономии вертикального пространства. Компгьзятор булет вполне доволен таким кодом, но ни вы, и никто из членов вашей команлы не захотели ИСПОЛЬЗОВанив ПР06ВЛОВ Стили расстановки скобок — не един~мино Репложилн некий стиль, выбеРите его и постарайтесь к м . с . б убелить лругих, менее проницательных членов вашей команды делать то е самое (если бы они баши прони- кола Если вы лумаете что где-то дол бь У жа их).
Если же ваши РУковолители не но, один с ль ра ановки п б в, ото сослались на некий устоявшийся стиль расстаиовки доили ленрорноо нроероммироеония: нричины и ними лере чирия Переемотренныая>ын С Часть ) Глава 2 Косметические исправления кода мент лля замены табуляции пробелами. Фактически вы можете узхе иметь такой инструмент.
Например, редак- тор М[сгозол Ч[зца! С+а имеет эту возможность. Пробелы вокруг символов Для улучшения читабельности программного кода следует творчески подходить к использованию пробелов. Снова-таки, нет единственно лраамяьноео способа расстановки пробелов, но неправильных способов — множество В приведенном ниже примере пробелы использованы скверно: гегпгп Сога1 О1пс1ппе <ееп11Ь.Ь> ]Ьпс1псе <агдсо.ь> Ыетгпе Р ргапгс Ыекспе 1 агоз зпС паса(1пг а,сваг'ч [)](ьаг г=5, г;11(а>1 ) г=1(ч[1)); 11(г<лс) г 5;11(г$2 =О)++тугое (з=сг 1<гетр Р(1/г= ( Лично я пользовался таким способом на протяжении многих лет. Многим позже я обнаружил, что для моих целей наиболее удобными оказываются отступы в два пробела.
Это была установка, от которой я не отступаю уже длительное время. Я приобрел привычку использовать два, прлобемлаолкогда,нара([,регуй]ярон(1мпоулбликплдть ;.";.~.'-Ч" "а':.', З -'-„'о-,;.д'"-„",,".",-'>на"'.~Г.,-; *':- й-;:.""',:,':"и пб*" '*' '„. " ',„':";:":.' ...„.'~':„1(-о Зпд "[.,11 ..ям о °,.
*"'о' 'О<:' м. л *"ао -' м [ ч д-" ь "' о „] ' сл ;; чг ~.," а~ [е:"з и,з '", 'х""., е' .,ъ, з.яг ..:,Ог.",":-'.„д,**;:,.;..:о"-'*"';,;*-*-, „':.„:;; -:,",,„'-,*"-„*",-,, Ч, ''' мо ,те ~,'ЗЯ[' '-'; О П ея] ° ' б.. *:21,"З.ера:. "::-Ч."~ Отта, -1)З" С)е 2<С>:-~"-ЬЬС'*Ю "::Ь.
'.'::ОЗ.',," ." нж. -"'=-',",'Э ~'« ен':'„- ";;,;,;,;"„;;;,;, *,*: '„'З', .' рй ..., '"-.;.'":,„' "Вмлз " '. 'но)о -, „' ': '„;. "-',', "',, й.,„-...,"" е з*: ('... ",.'"'",1[->ге"','„.:-.'р',:;".".4 дч:-;.о-".г,™,;о. -'-е;:";.'~'зь;-"з'-;". '", ';:.;" Лаз 1пе Воо(1пе Ьег[А) [В] [С)) ( зпС а, Ь, с, Сога1 = О; [ог(а = Оз а < Аз аее) ( [ог(Ъ = О; Ь < В; Ь++) ( Хпг(с " О; с < Сг с++] ( Сога1 += Ьаг[а)[Ь](с] ) ) ) .":",;:--;;":РЗ)Ч:.О).':Ь"";;оп.,",ои",К„:[я,:я.
Э '",',-'"",;:Кл:,,"-~да ': ' ":з "". '." д! Г мч „,: '.„!""-1' '. 'о[з .',)";:>гьр'" Многие люди очень часто в процессе сопровождения кода, который не они лично написали, поддаются искушению корректировать стили расстановки скобок и пробелов, чтобы угодить руководителям проекта, или даже делают это по своемч вкусу. Я лично никогда этого не делаю (по крайней мере, не тогда, когда за мной кто-то смотрит). Пока руководитель проекта вполне определенно не попросил вас сделать это, не проявляйте инициативу.
Часто бывает полезно иметь возможность сравнить две версии исходного файла: текущую и прелылушую, свободную от ошибок версию, чтобы увидеть. чем они отличаются и, следовательно, узнать, где можег крыться ошибка. Если кто-то "поигрался" с пробелами, вы обнаружите множество ложных улучшений, которые замедляют вашу работу и оказываются причиной снижения вашей производительности (не говоря уже о явной раздражительности, которую вызывают такие манипуляции). Если вы не ведетс историю реви- влез бесконечно оскорбительный оператор йо(о". Если вы удивлены, откуда я знаю, что это был именно он, а нс Лзннис Ричи, сообщаю: их общее соглашение состояло в том, что большую половин> первой части книги— учебный разлел — пишет Керниген, а Ричи делает большую часть или даже весь раздел ссылок.) Использование оператора йо(о может серьезно затруднить реализацию управляющей логики вашего кода.
Исходный код, содержащий множество операторов його, часто графически описывается как "код-спагетти", поэтому в документах по стандартам кодирования большинства проектов осу:гдается их применение. Обычно довольно просто после некоторых размышлений найти альтернативу применению оператора йо(о. Этот процесс будет часто включать использование доцолнительной переменной состояния, поэтому программисты встроенных систем (См, главу 27 "Встроенные системы". — Прим. науч.