Памятка С/С++
Несколько полезных правил, которых следует придерживаться при разработке программ на C/C++:
- Советами нужно пользоваться там, где они применимы. Не существует замены здравому смыслу.
- Не забывайте в конце своих функций добавлять "return выражение", потому что в противном случае функция обязательно выдаст "мусор".
- Программа на Си - это много "маленьких функций" и процедур, а не мало больших.
- Разбивайте сложные выражения на более простые.
- Уменьшайте набор потенциальных зависимостей (в области видимости) до набора реальных.
- Если в функции используются исключительно комментарии вида "// ...", то при необходимости большие фрагменты кода можно быстро отключить или вернуть при помощи "/* ... */". Но не следует забывать, что препроцессор Си не понимает комментарии вида "// ...".
- Не полагайтесь на очередность вычисления элементов выражения, если не знаете точно.
- Базовые типы (char, int, short, long, float, double) имеют разное максимальное значение на разных платформах - всегда проверяйте граничные значения на текущей платформе при помощи констант из файлов <limits.h> и <float.h>.
- Старайтесь освобождать память в той-же функции, в которой ее выделяете.
- Если у функции есть аргументы, опишите их, если их нет, используйте слово void. В коде
функции перед тем, как использовать аргументы
- Проверяйте, получены ли аргументы вообще;
- Всегда проверяйте тип и диапазон;
- Если что-то не так, то попытайтесь их привести к правильному виду и сообщите о случившимся;
- если нет возможности скорректировать аргументы, то должно быть сгенерировано исключение.
- У внутренних имен в Си значимы только первые 31 символ. Для внешних имен функций и переменных гарантируется уникальность только в пределах первых 6 символов в любом регистре.
- Макросы почти никогда не требуются в С++.
- Пользуйтесь "const" или "enum" для определения констант.
- Используйте "inline" для уменьшения накладных расходов на вызов функций.
- Применяйте "templat" для для определения семейства функций.
- Для предотвращения конфликтов имен есть "namespace".
- Не объявляйте переменную, пока она не потребуется, чтобы тут-же ее инициализировать. Всегда инициализируйте начальным значением все объявленные переменные.
- Не используйте "malloc" - оператор "new" делает то же самое лучше.
- Вместо "realloc" используйте "vector".
- Везде, где только возможно, пользуйтесь средствами стандартной библиотеки вместо возни с указателями и байтами.
- В большинстве случаев приведение типа означает ошибку на этапе проектирования.
- Применение стандартных библиотек классов С++ "string" и "vector" поможет упростить программирование и свести к минимуму необходимость использования традиционных для С массивов символов и строк.
- В начале проектирования программы старайтесь представить ее в виде набора взаимодействующих понятий, реализованных в виде классов и объектов, а не в виде набора структур данных с функциями.
- Старайтесь, чтобы структура программы отражала ваши идеи:
- Отдельные понятия оформляйте в виде классов.
- Сущности следует делать объектами классов
- Если два класса имеют общий интерфейс, то его следует оформить в виде абстрактного класса.
- Если в реализации нескольких классов есть нечто существенно общее, то это лучше реализовать в виде базового класса.
- Если класс является контейнером объектов - сделайте из него шаблон.
- Если функция реализует алгоритм для контейнера, оформите ее в виде шаблона функции, выполняющего алгоритм для семейства контейнеров.
- Если набор классов, шаблонов, данных и т.п. логически связаны, то поместите их в одно пространство имен.
- Не создавайте в классе "поля типа" - пользуйтесь виртуальными функциями.