Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Степанов Е.О. -> "Стиль программирования на С++ " -> 11

Стиль программирования на С++ - Степанов Е.О.

Степанов Е.О., Чириков С.В. Стиль программирования на С++ — Спб.: ГИТМО, 2001. — 48 c.
Скачать (прямая ссылка): stilprogrammivaniya2001.pdf
Предыдущая << 1 .. 5 6 7 8 9 10 < 11 > 12 13 .. 14 >> Следующая


"chSTR2(_LINE_) ") " #desc)

#define BUG(desc) message(":BUG:("_FILE_", \

"chSTR2(_LINE_) ") " #desc)

Когда вы вставляете эти строки в ваш .h/ .cpp - файл, вы можете использовать их следующим образом:

34 main() {

if (condition) // in-line comment

#pragma TODO("Add error handling here")

else if (condition) // in-line comment

else // in-line comment

#pragma TODO("There is no error handling here")

}

Это позволит видеть все потенциальные проблемы программы во время ее компиляции.

• Форматирование кода программы при использовании ключевых слов Gotcha.

• Ключевое слово Gotcha должно быть первым словом комментария.

• Комментарий может состоять из нескольких слов, но первое слово должно содержать смысл комментария, а последующие слова служат лишь для уточнения.

• Имя автора и дата внесения замечания должны быть частью комментария.

Часто Gotcha остаются в программе дольше, чем это необходимо. Данные о дате и авторе изменений позволят принять другим программистам решение. Зная имя автора, вы сможете связаться с ним и получить консультацию.

Пример:

// :TODO: tmh 960810: possible performance problem

// We should really use a hash table here but for now we'll

// use a linear search.

// :KLUDGE: tmh 960810: possible unsafe type cast

// We need a cast here to recover the derived type. It should

// probably use a virtual method or template.

35 5. ОПЕРАТОРЫ

5.1. Оператор if...else

• Если if завершается оператором return, то не используйте else. Код получается более понятным.

Так, вместо

if (condition) return 0;

else {

do_something();

}

лучше написать

if (condition) return 0; do_something();

В этом случае последним return может быть выдача кода ошибки (это позволит отловить «случайное» попадание в ненужную ветвь алгоритма).

• Необходимо стараться проверять все альтернативные возможности (в том числе все "предельные случаи").

5.2. Циклы

• По возможности следует избегать циклов do...while. Они опасны тем, что тело цикла исполняется всегда хотя бы один раз. Кроме того, при чтении программы очень трудно отыскать проверяемое условие, т. к. while в такой конструкции располагается «внизу», т.е. в конце тела цикла. По этим причинам никогда не следует употреблять do...while для организации бесконечного цикла - для этой цели намного лучше использовать while(1).

• Всегда используйте оператор for, если присутствуют любые два из инициализирующего, условного или инкрементного выражений. Это сокращает код и делает его более понятным.

5.3. Препроцессор

• Обязательно заключайте в скобки тела сложных макросов и их аргументы. Например, следует писать

36 #define TWO_K (1024+1024) //correct!

а не

#define TWO_K 1024+1024 //incorrect!

В последнем случае TWO_K*10 будет вычислено на этапе компиляции

как 1024 + 1024*10=11264 вместо ожидаемого 20480.

Из приведенного примера видно, что макросы может быть достаточно трудно сопровождать. Поэтому:

• для задания констант, используемых в программе (кроме системо-зависимых параметров) по возможности следует использовать модификатор const или перечисление enum и избегать использования #define;

• вместо параметризованных макрооопределений #define лучше использовать inline-функции.

5.4. Константы и перечисления

Следует помнить, что const int на самом деле не задает константу, а резервирует память под int (хотя и запрещает менять содержащееся в ней значение). Под перечисление enum память никогда не выделяется, поэтому использование enum может быть предпочтительнее.

6. МОБИЛЬНОСТЬ

Мобильность программ - это свойство, позволяющее выполнять программы на разных компьютерах, под управлением разных операционных систем, с минимальными изменениями кода. Естественно, мобильность предусматривает и возможность трансляции программы разными компиляторами. Думать о мобильности нужно даже в том случае, если предполагается, что программа пишется, скажем, только «под» Windows NT и только с использованием MS Visual C++ (т.е. никогда не планируется использовать другой компилятор). Дело в том, что аппаратное и программное обеспечение не стоит на месте, и вполне возможно, что через несколько лет написанную вами программу придется полностью переделывать под новую версию «старой» операционной системы и, соответственно, под новый компилятор.

6.1. Зависимость от компилятора

Некоторые детали в C/C++ не стандартизованы. Например:

• не определен порядок вычисления операндов большинства бинарных операций, таких как сложение и умножение. Следовательно, не опреде-

37 лен порядок появления возможных побочных эффектов;

• некоторые директивы и ключевые слова (в основном это директивы препроцессора) поддерживаются только определенными компиляторами.

Не следует явно или неявно пользоваться нестандартными возможностями,

предоставляемыми конкретным компилятором.

6.2. Зависимость от компьютера

• Не следует полагаться на определенный размер машинного слова, он может быть разным у разных компьютеров.
Предыдущая << 1 .. 5 6 7 8 9 10 < 11 > 12 13 .. 14 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100