Правила программирования на Си и Си++

Natos y Waor Cicatrices Acustico Роллы химки тут. | Суши пицца заказать на http://pizza-maestro.ru. |

Содержание


Введение
Введение - часть 2
Процесс проектирования
1. Сущность программирования: без сюрпризов, минимум сцепления и максимум согласованности
2. Подавляйте демонов сложности (часть 1)
2.2. Решайте конкретную проблему, а не общий случай
2.2. Решайте конкретную проблему, а не общий случай - часть 2
3. Интерфейс пользователя не должен быть похожим на компьютерную программу (принцип прозрачности)
3. Интерфейс пользователя не должен быть похожим на компьютерную программу (принцип прозрачности) - часть 2
3. Интерфейс пользователя не должен быть похожим на компьютерную программу (принцип прозрачности) - часть 3
4. Не путайте легкость в изучении с легкостью в использовании
5. Производительность может измеряться числом нажатий клавиш
6. Если вы не можете сказать это по-английски, то вы не сможете выполнить это и на Си/Си++
6. Если вы не можете сказать это по-английски, то вы не сможете выполнить это и на Си/Си++ - часть 2
6.1. Начинайте с комментариев
7. Читайте код
7.1. В цехе современных программистов нет места примадоннам
8. Разбивайте сложные проблемы на задачи меньшего размера
9.1. Используйте для работы соответствующий инструмент
10. Проблема должна быть хорошо продумана перед тем, как она сможет быть решена
11. Компьютерное программирование является индустрией обслуживания
13. Заказчик всегда прав
14. Малое — это прекрасно (большое == медленное)
Общие проблемы разработки программ
15. Прежде всего, не навреди
18. Нельзя измерять свою производительность числом строк
19. Вы не можете программировать в изоляции
20. Пустые потери времени
21. Пишите программу с учетом сопровождения — вы специалист по сопровождению
21.1. Эффективность — часто просто пугало
Форматирование и документация
22. Программа без комментариев ничего не стоит
23. Располагайте программу и документацию вместе
24. Комментарии должны быть предложениями
25. Пропустите свой исходный тест через систему проверки орфографии
26. Комментарий не должен подтверждать очевидное
27. Комментарий должен предоставлять только нужную для сопровождения информацию
27. Комментарий должен предоставлять только нужную для сопровождения информацию - часть 2
27. Комментарий должен предоставлять только нужную для сопровождения информацию - часть 3
29. Комментарии должны быть выровнены вертикально
30. Используйте аккуратные столбцы везде, где можно
31. Не располагайте комментариев между именем функции и открывающей скобкой
32. Помечайте конец длинного составного оператора чем-нибудь, имеющим смысл
33. Располагайте в строке только один оператор
34. Указывайте имена аргументов в прототипах функций
35. Используйте "предикатную" форму при разбиении длинных выражений
36. Подпрограмма должна помещаться на экране
37. Нужно обеспечивать возможность распечатки всего текста программы
38. Используйте штриховую линию для зрительного разделения подпрограмм
39. Пробел — один из наиболее эффективных комментариев
40. Используйте отступы в четыре пробела
41. Условные операторы выделяются абзацными отступами
41.1. Комментарии должны иметь тот же отступ, что и окружающий текст программы
42. Выравнивайте скобки вертикально по левой границе
43. Используйте скобки, если в условном операторе имеется более, чем одна строка
Имена и идентификаторы
44. Имена должны быть обычными
44.1. Не используйте в качестве имен тарабарщину
45. Имена макросов должны записываться ЗАГЛАВНЫМИ_БУКВАМИ
45.1. Не используйте заглавных букв для констант перечисления
45.2. Не используйте заглавных букв в именах типов, созданных при помощи typedef
46. Не пользуйтесь именами из стандарта ANSI Cи
47. Не пользуйтесь именами Microsoft
48. Избегайте ненужных идентификаторов
49. Именованные константы для булевых величин редко необходимы
49. Именованные константы для булевых величин редко необходимы - часть 2
Правила обычного программирования
50. Не путайте привычность с читаемостью
50. Не путайте привычность с читаемостью - часть 2
51. Функция должна делать только одно дело
52. Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало
53. Функция должна вызываться более одного раза, но…
53.1. Код, используемый более одного раза, должен быть помещен в функцию
54. Функция должна иметь лишь одну точку выхода
54.1. Всегда предусматривайте возврат значения из блока внешнего уровня
55. Избегайте дублирования усилий
56. Не захламляйте область глобальных имен
56.1. Избегайте глобальных идентификаторов
56.2. Никогда не требуйте инициализации глобальной переменной при вызове функции
56.2.1. Делайте локальные переменные
56.3. Используйте счетчик экземпляров объектов вместо инициализирующих функций
56.4. Если оператор if завершается оператором return, то не используйте else
57. Помещайте более короткий блок условного оператора if/else первым
58. Старайтесь сдвинуть ошибки с этапа выполнения на этап компиляции
59. Применяйте указатели на функции Си в качестве селекторов
60. Избегайте циклов do/while
60.1. Никогда не используйте do/while для бесконечного цикла
61. В цикле со счетчиком его значение должно по возможности уменьшаться
62. Не делайте одно и то же двумя способами одновременно
63. Используйте оператор for
64. То, чего нет в условном выражении, не должно появляться и в других частях оператора for
65. Допускайте, что ситуация может измениться в худшую сторону
66. Компьютеры не знают математики
66.1. Рассчитывайте на невозможное
66.2. Всегда проверяйте коды возврата ошибки
67. Избегайте явно временных переменных
68. Не нужно магических чисел
69. Не делайте предположений о размерах
69. Не делайте предположений о размерах - часть 2
70. Опасайтесь приведения типов (спорные вопросы Си)
70. Опасайтесь приведения типов (спорные вопросы Си) - часть 2
71. Немедленно обрабатывайте особые случаи
72. Не старайтесь порадовать lint
73. Помещайте код, динамически распределяющий и освобождающий память, в одном и том же месте
74. Динамическая память — дорогое удовольствие
75. Тестовые подпрограммы не должны быть интерактивными
76. Сообщение об ошибке должно подсказывать пользователю, как ее исправить
77. Не выводите сообщения об ошибке, если она исправима
78. Не используйте системно-зависимых функций для сообщений об ошибках
Препроцессор
79. Все из одного .h файла должно быть использовано в по меньшей мере двух .c файлах
80. Используйте вложенные директивы #include
81. Вы должны быть всегда способны заменить макрос функцией
81. Вы должны быть всегда способны заменить макрос функцией - часть 2
81. Вы должны быть всегда способны заменить макрос функцией - часть 3
81. Вы должны быть всегда способны заменить макрос функцией - часть 4
81.1. Операция ?: не то же самое, что и оператор if/else
81.2. Помещайте тело макроса и его аргументы в круглые скобки
82. Enum и const лучше, чем макрос
83. Аргумент параметризированного макроса не должен появляться в правой части более одного раза
83.1. Никогда не используйте макросы для символьных констант
84. Если все альтернативы отпали, то используйте препроцессор
84. Если все альтернативы отпали, то используйте препроцессор - часть 2
Правила, относящиеся к языку Си
85. Подавляйте демонов сложности (часть 2)
85.1. Устраняйте беспорядок
85.2. Избегайте битовых масок; используйте битовые поля
85.3. Не используйте флагов завершения
85.4. Рассчитывайте, что ваш читатель знает Си
85.5. Не делайте вид, что Си поддерживает булевый тип (#define TRUE)
86. Для битового поля размером 1 бит должен быть определен тип unsigned
87. Указатели должны указывать на адрес, больший, чем базовый для массива
88. Используйте указатели вместо индексов массива
89. Избегайте goto, за исключением…
89. Избегайте goto, за исключением… - часть 2
Правила программирования на Си++
90.1. Если проект не ориетирован на объекты, то используйте Си
90.1. Если проект не ориетирован на объекты, то используйте Си - часть 2
91. Рассчитывайте потратить больше времени на проектирование и меньше на разработку
92. Библиотеки классов Си++ обычно не могут быть использованы неискушенными пользователями
93. Пользуйтесь контрольными таблицами
93. Пользуйтесь контрольными таблицами - часть 2
94. Сообщения должны выражать возможности, а не запрашивать информацию
95. Вам обычно не удастся переделать имеющуюся структурную программу в объектно-ориентированную
95. Вам обычно не удастся переделать имеющуюся структурную программу в объектно-ориентированную - часть 2
97. Наследование — это процесс добавления полей данных и методов-членов
97. Наследование — это процесс добавления полей данных и методов-членов - часть 2
97. Наследование — это процесс добавления полей данных и методов-членов - часть 3
98. Сначала проектируйте объекты
99. Затем проектируйте иерархию снизу вверх
99.1. Базовые классы должны иметь более одного производного объекта
101. Си++ — это не Smalltalk: избегайте общего класса object
101. Си++ — это не Smalltalk: избегайте общего класса object - часть 2
101. Си++ — это не Smalltalk: избегайте общего класса object - часть 3
101. Си++ — это не Smalltalk: избегайте общего класса object - часть 4
101. Си++ — это не Smalltalk: избегайте общего класса object - часть 5
104. Инициализируйте виртуальные базовые классы при помощи конструктора, используемого по умолчанию
107. Используйте закрытые базовые классы лишь когда вы должны обеспечить виртуальные замещения
108. Проектируйте структуры данных в последнюю очередь
110. Никогда не допускайте открытого доступа к закрытым данным



Начало