Практические занятия по курсу ОиМП/C++ check — различия между версиями
Материал из Wiki - Факультет компьютерных наук
Строка 1: | Строка 1: | ||
== Оформление == | == Оформление == | ||
− | + | <ol> | |
− | + | <li>Отступ - 4 пробела. Символы табуляции использовать для отступов запрещено.</li> | |
− | + | <li>Отступами выделяются: тела функций, структур/классов, вложенных блоков.</li> | |
− | + | <li>Бинарные операторы отбиваются пробелами с двух сторон, после унарных пробелы не ставятся: a += b + -c</li> | |
− | + | <li>Пробелы после открывающей скобки и перед закрывающей скобкой не ставятся: f(1, (2 + 3)). Закрывающая скобка должна идти на той же строке, что и последнее выражение.</li> | |
− | + | <li>Максимальная длина строки - 100 символов.</li> | |
− | + | <li>Перед ; пробел не ставится. После ; в for ставится пробел.</li> | |
− | + | <li>Пустые блоки записываются как {} (а не ;).</li> | |
− | + | <li>Открывающая { пишется на той же строке, что и начало блока (if, while, for, объявление функции).</li> | |
− | + | <li>else пишется на той же строке, что и закрывающая } от if: if (...) {...\n} else {</li> | |
− | + | <li>Однострочные комментарии отделяются от кода двумя пробелами и начинаются с пробела.</li> | |
− | + | <li>Пробелы в конце строки запрещены.</li> | |
− | + | <li>Файл должен заканчиваться переводом строки.</li> | |
− | + | <li>В range-base for двоеточие обрамляется пробелами.</li> | |
− | + | <li>В начале/конце блока, после public/private/protected пустые строки не ставятся.</li> | |
− | + | <li>Перед объявлением функции/структуры/класса - пустая строка обязательна.</li> | |
− | + | <li>Секции include-ов и using-ов были упорядочены по алфавиту. | |
Плохо: | Плохо: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
Строка 41: | Строка 41: | ||
using std::cout; | using std::cout; | ||
using std::vector; | using std::vector; | ||
− | </source> | + | </source></li> |
− | + | <li>Имя шаблона и параметр шаблона НЕ должны разделяться пробелом. | |
− | + | ||
Плохо: | Плохо: | ||
Строка 53: | Строка 52: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
vector<int> v | vector<int> v | ||
− | </source> | + | </source></li> |
== Именование == | == Именование == | ||
− | + | <li>Не используйте транслит в именах. | |
Плохо: | Плохо: | ||
Строка 66: | Строка 65: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
size_t length; | size_t length; | ||
− | </source> | + | </source></li> |
− | + | <li>Давайте переменным осмысленные имена. В частности, не используйте однобуквенных имён за исключением имён итераторов (i, j, k, ...), координат (x, y, z). | |
Плохо: | Плохо: | ||
Строка 96: | Строка 95: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
int length; | int length; | ||
− | </source> | + | </source></li> |
== Прочее == | == Прочее == |
Версия 00:04, 28 февраля 2015
Содержание
Оформление
- Отступ - 4 пробела. Символы табуляции использовать для отступов запрещено.
- Отступами выделяются: тела функций, структур/классов, вложенных блоков.
- Бинарные операторы отбиваются пробелами с двух сторон, после унарных пробелы не ставятся: a += b + -c
- Пробелы после открывающей скобки и перед закрывающей скобкой не ставятся: f(1, (2 + 3)). Закрывающая скобка должна идти на той же строке, что и последнее выражение.
- Максимальная длина строки - 100 символов.
- Перед ; пробел не ставится. После ; в for ставится пробел.
- Пустые блоки записываются как {} (а не ;).
- Открывающая { пишется на той же строке, что и начало блока (if, while, for, объявление функции).
- else пишется на той же строке, что и закрывающая } от if: if (...) {...\n} else {
- Однострочные комментарии отделяются от кода двумя пробелами и начинаются с пробела.
- Пробелы в конце строки запрещены.
- Файл должен заканчиваться переводом строки.
- В range-base for двоеточие обрамляется пробелами.
- В начале/конце блока, после public/private/protected пустые строки не ставятся.
- Перед объявлением функции/структуры/класса - пустая строка обязательна.
- Секции include-ов и using-ов были упорядочены по алфавиту.
Плохо:
#include <vector> #include <iostream>
Хорошо:
#include <iostream> #include <vector>
Плохо:
using std::vector; using std::cin; using std::cout;
Хорошо:
using std::cin; using std::cout; using std::vector;
- Имя шаблона и параметр шаблона НЕ должны разделяться пробелом.
Плохо:
vector <int> v;
Хорошо:
vector<int> v
- Не используйте транслит в именах.
Плохо:
size_t dlina_massiva;
Хорошо:
size_t length;
- Давайте переменным осмысленные имена. В частности, не используйте однобуквенных имён за исключением имён итераторов (i, j, k, ...), координат (x, y, z).
Плохо:
char alf(int j) { ... } // или char alphabet(int j) { ... }
Хорошо:
char get_char(int j) { ... }
Плохо:
int ln;
Хорошо:
int length;
- Необходимо явно подключать заголовочные файлы, в которых объявляются используемые функции/классы/... Запрещено явно подключать один и тот же заголовочный файл дважды.
- В качестве логических операторов следует использовать &&, ||, ... Их аналоги and, or, ... запрещены.
- Запрещено использовать приведение типов в стиле C - следует использовать *_cast.
- Конструктор от одного аргумента должен быть объявлен explicit.
- Порядок аргументов функции: сначала входные параметры (по значению либо константой ссылке), затем выходные (по указателю).
- При объявлении виртуальной функции следует использовать один и только один из спецификаторов virtual, final, override.
- При объявлении переменной спецификаторы static/extern/... идут перед именем типа.
- Запрещено использовать директиву using namespace. Нужно либо каждый раз указывать namespace явно, либо импортировать конкретные типы/переменные: using std::vector.
- Передавайте аргументы в функции по константной ссылке везде, где это уместно.
- Везде, где это возможно, используйте префиксный инкремент и декремент.
- Не создавайте функции с избыточным числом аргументов. Например, в функцию, печатающую вектор, не нужно передавать размер вектора.
- Пишите код так, чтобы не было предупреждений (warnings) компилятора. В частности, избегайте сравнений знаковых (int) и беззнаковых (size_t) переменных.
Именование
Прочее
Плохо:
void print_vector(vector<int> v) { ... }
Хорошо:
void print_vector(const vector<int>& v) { ... }
Плохо:
i++; it--;
Хорошо:
++i; --it;
Плохо:
void print_vector(const vector<int>& v, int n) { for (size_t i = 0; i < n; ++i) { cout << v[i] << " "; } }
Хорошо:
void print_vector(const vector<int>& v) { // Используйте v.size(), чтобы получить длину вектора for (size_t i = 0; i < v.size(); ++i) { cout << v[i] << " "; } }
Плохо:
for (int i = 0; i < v.size(); ++i) { ... }
Хорошо:
for (size_t i = 0; i < v.size(); ++i) { ... }