Введение 




Название этой книги отражает то, что я считаю основной трудностью при работе как с С++, 
так и с С: эти языки дают вам столько гибкости, что если у вас нет желания и способности 
призвать себя к порядку, то в итоге вы можете получить гигантский модуль не поддающейся 
сопровождению тарабарщины, притворяющейся к тому же компьютерной программой. Вы можете 
поистине делать все при помощи этих языков, даже если вы этого не хотите. В этой книге 
делается попытка дать средство для преодоления этой трудности в виде собрания практических 
правил программирования на С++ и С - правил, которые, надеюсь, уберегут вас от неприятностей, 
если вы будете их использовать с самого начала. Хотя большинство из приводимых здесь правил 
применимы равно при программировании как на С, так и на С++, я включил много материала, 
относящегося лишь к миру С++ и сконцентрированного по мере возможности в заключительном 
разделе. Если вы программируете лишь на С, то просто игнорируйте материал по С++, встречающийся 
вам в более ранних разделах. 

Я профессионально занимаюсь программированием примерно с 1979 года и ежедневно пользуюсь 
правилами из этой книги. Я не утверждаю, что эти правила безусловны, или даже "верны". Однако 
я могу сказать, что они отлично мне служили все это время. Хотя эта книга не относится к 
категории путеводителей по "ловушкам и рытвинам", многие из этих правил предохранят вас от 
неприятностей того сорта, который обсуждается в путеводителях по "ловушкам и рытвинах". 

Практические правила по своей сути гибки. Они постепенно меняются с ростом опыта, и ни одно 
правило не действует постоянно. Тем не менее я предупреждаю вас с самого начала, что мое мнение 
относительно этого материла самое наилучшее и что я не очень симпатизирую неряшливым мыслям или 
небрежному программированию. Я не извиняюсь за усиленное подчеркивание тех вещей, в которые я 
сильно верю. Мои мнения всегда могут измениться, если, конечно, вы сможете убедить меня в том, 
что я не прав, но имейте в виду, что эта книга основана на опыте, а не на теории. Я сознаю, что 
большая часть этой книги подходит опасно близко к чьему-то культу и многие вещи, произносимые 
мной, дискуссионны, но думаю, что всегда имеется возможность разумного разговора двух людей, 
объединенных целью совершенствования своего мастерства. 

Я часто читаю курсы по С++ и объектно-ориентированному проектированию как по приглашению частных 
фирм, так и в Калифорнийском университете в Беркли. Эта книга появилась в ответ на просьбы моих 
студентов, большинство из которых увлеченные профессионалы с настоящим желанием изучить этот 
материал. Я вижу множество программ в процессе проверки домашних заданий, и эти программы достаточно 
репрезентативны в качестве произведений сообщества профессиональных программистов из района залива 
Сан-Франциско. К несчастью, каждый семестр я также вижу, что одни и те же проблемы повторяются снова 
и снова. Поэтому эта книга является некоторым образом и списком распространенных проблем, найденных
мной в созданных настоящими программистами реальных программах, сопровождаемым моими советами по 
их решению. 

Обсуждаемые здесь проблемы программирования и проектирования не ограничиваются, к несчастью, 
лишь ученическими программами. Многие из примеров того, что не следует делать, взяты из 
коммерческого продукта: библиотеки классов Micrisoft Foundation Class(MFC) корпорации Micrisoft. 
Я могу сказать, что эта библиотека была спроектирована без заботы о хорошем сопровождении людьми, 
не подозревающими о существовании даже элементарных принципов объектно-ориентированного 
проектирования. Я не выделял явно большинство примеров этого в тексте, так как это не книга с 
названием "Что неправильно в MFC"; пользователи библиотеки MFC узнают ее код, когда натолкнутся 
на него. Я выбрал примеры из MFC просто потому, что мне пришлось много с ней работать и очень 
близко познакомиться с ее недостатками. Во многих других коммерческих библиотеках классов имеются 
сходные проблемы. 

Наконец, эта книга не является введением в С++. Обсуждение, сопровождающее относящиеся к С++ 
правила, предполагает, что вы знаете этот язык. Я не расходую место на описание того, как 
работает С++. Имеется множество хороших книг, которые учат вас языку С++, включая мою собственную 
C+C++ (New York, McGraw-Hill,1993). Вы должны также ознакомиться с принципами объектно-ориентированного 
проектирования. Я рекомендую второе издание книги Гради Буча 
Object-Oriented Analysis and Design with Applications (Redwood City, Benjamin Cummings,1994). 

О нумерации правил: иногда я группировал некоторые правила вместе, потому что удобно описывать 
их все одновременно. В этом случае все эти правила (имеющие различные номера) располагаются в 
начале раздела. Я использовал запись номера правила вида "1.2" в случаях, когда оно является 
особым случаем другого правила. 
Используются технологии uCoz