Я написал маленькую электронную книгу в которой рассматриваю вопросы как сделать код лучше. Книга ориентирована на Си/Си++ программистов, но будет интересна и разработчикам, использующих другие языки. Формат книги не подходит для моего любимого Хабра, но мне интересно получить обратную связь и обсудить мысли, изложенные в статье. Поэтому я решил разместить здесь только анонс, а с самой статьей можно познакомиться здесь. И приглашаю в комментарии для обсуждения.
Надеюсь вам понравился этот сборник советов. Конечно, предупредить о всех способах написать программу неправильно невозможно, да в этом и нет смысла. Моей целью было предостеречь программиста и развить в нем чувство опасности. Возможно, когда программист в очередной раз столкнется с чем-то непонятным, он вспомнит о моих наставлениях и не станет торопиться. Иногда несколько минут изучения документации или написание более простого/ясного кода позволит избежать внесения скрытой ошибки, которая затем несколько лет отравляла бы жизнь пользователям и коллегам.
Вот 42 темы, которые я рассматриваю:
- Не берите на себя работу компилятора
- Больше 0, это не 1
- Один раз скопируй, несколько раз проверь
- Бойтесь оператора ?: и заключайте его в круглые скобки
- Используйте доступные инструменты для проверки кода
- Проверьте все места, где указатель явно приводится к целочисленным типам
- Не вызывайте функцию alloca() внутри циклов
- Помните, что исключение в деструкторе — это опасно
- Используйте для обозначения терминального нуля литерал '\0'
- Старайтесь «не мельчить» при использовании #ifdef
- Не жадничайте на строчках кода
- Занимаясь Copy-Paste, сосредоточьтесь в конце работы
- Выравнивайте однотипный код «таблицей»
- Помните: не всегда достаточно компилятора и хорошего стиля кодирования
- Если есть возможность, начинайте использовать enum class.
- «Смотрите как я могу» — недопустимо в программировании
- Используйте специализированные функции для затирания в памяти приватных данных
- Знания, полученные при работе с одним языком, не всегда применимы к другому языку
- Как правильно вызвать один конструктор из другого
- Проверки о достижении конца файла (EOF) может быть недостаточно
- Проверяйте признак достижения конца файла (EOF) правильно
- Не используйте #pragma warning(default: X)
- Вычисляйте длину строкового литерала автоматически
- Идентификаторы override и final должны стать вашими новыми друзьями
- Больше не сравнивайте 'this' с nullptr
- Коварный VARIANT_BOOL
- Коварные BSTR строки
- Не делайте макрос там, где можно сделать обыкновенную функцию
- Используйте для итераторов префиксный оператор инкремента (++i) вместо постфиксного (i++)
- Visual C++ и функция wprintf()
- В C и C++ массивы не передаются по значению
- Бойтесь printf
- Никогда не разыменовывайте нулевые указатели
- Undefined behavior ближе, чем вы думаете
- Добавляя в enum новую константу, не забываем поправить операторы switch
- Если на вашем компьютере происходят магические события, проверьте память
- Бойтесь оператора continue внутри do {… } while(...)
- С сегодняшнего дня используйте nullptr вместо NULL
- Почему некорректный код иногда работает
- Внедрите статический анализ кода
- Сопротивляйтесь добавлению в проект новых библиотек
- Не давайте функциям название «empty»
Итак, ссылка на статью: http://www.viva64.com/ru/b/0391/
На английском языке: http://www.viva64.com/en/b/0391/
Я предвижу, что может нечаянно приключиться Хаброэффект, поэтому хочу заранее подстраховаться. Поэтому выкладываю на Яндекс Диск в формате PDF:
Русский: https://yadi.sk/i/LKkWupFjr5WzR
Английский: https://yadi.sk/i/pBZqebxsr5Wyg
P.S. Я специально не размещаю текст книги на других сайтах. Достаточно много людей сообщает о недочётах в тексте, и, если текст будет опубликован в нескольких местах, я замучаюсь вносить исправления. Когда текст стабилизируется, я размещу его ещё где-то в разных форматах. Пока же прошу отнестись с пониманием. И ещё просьба. О замеченных ляпах прошу писать мне на почту (karpov [@] viva64.com), а не в комментариях.