У функций нужно обязательно указывать тип возвращаемого значения
int getValue() // НЕЛЬЗЯ: getValue()
{
:
}
Если это не указано явно, C++ считает, что возвращаемое значение имеет тип int. Никогда нельзя полагаться на это, поскольку такой способ может смутить программистов, не знакомых с ним.
69. Не следует использоватьgoto.
Этот оператор нарушает принципы структурного программирования. Следует использовать только в очень редких случаях (например, для выхода из глубоко вложенного цикла), когда иные варианты однозначно ухудшат читаемость.
70. Следует использовать «0» вместо «NULL».
NULL является частью стандартной библиотеки C и устарело в C++.
6.1
71. Основной отступ следует делать в два пробела.
for (i = 0; i < nElements; i++)
a[i] = 0;
Отступ в один пробел достаточно мал, чтобы отражать логическую структуру кода. Отступ более 4 пробелов делает глубоко вложенный код нечитаемым и увеличивает вероятность того, что строки придётся разбивать. Широко распространены варианты в 2, 3 или 4 пробела; причём 2 и 4 — более широко.
Блоки кода следует оформлять так, как показано в примере 1 (рекомендуется) или в примере 2, но ни в коем случае не так, как показано в примере 3. Оформление функций и классов должно следовать примеру 2.
while (!done) {
doSomething();
done = moreToDo();
}
while (!done)
{
doSomething();
done = moreToDo();
}
while (!done)
{
doSomething();
done = moreToDo();
}
Пример 3 использует лишние отступы, что мешает ясному отображению логической структуры кода.
73. Объявления классов следует оформлять следующим образом:
class SomeClass : public BaseClass
{
public:
...
protected:
...
private:
...
}
Частное следствие из правила, указанного выше.
74. Определения методов следует оформлять следующим образом:
void someMethod()
{
...
}
Следствие из правила, указанного выше.
75. Конструкциюif-else следует оформлять следующим образом:
if (condition) {
statements;
}
if (condition) {
statements;
}
else {
statements;
}
if (condition) {
statements;
}
else if (condition) {
statements;
}
else {
statements;
}
Следствие из правила, указанного выше. Причём написание else на той же строке, где стоит закрывающая фигурная скобка первого блока, не является запрещённым:
if (condition) {
statements;
} else {
statements;
}
Лучше каждую часть if-else помещать на отдельной строке. Это упрощает действия с кодом, например, перемещение блока else.
76. Циклfor следует оформлять следующим образом:
for (initialization; condition; update) {
statements;
}
Следствие из правила, указанного выше.
77. Циклfor с пустым телом следует оформлять следующим образом:
for (initialization; condition; update)
;
Делает акцент для читающего на том, что тело пусто. Однако циклов, не имеющих тела, следует избегать.
78. Циклwhile следует оформлять следующим образом:
while (condition) {
statements;
}
Следствие из правила, указанного выше.
79. Циклdo-while следует оформлять следующим образом:
do {
statements;
} while (condition);
Следствие из правила, указанного выше.
80. Конструкциюswitch следует оформлять следующим образом:
switch (condition) {
case ABC :
statements;
// Отсутствует "break"
case DEF :
statements;
break;
case XYZ :
statements;
break;
default :
statements;
break;
}
Обратите внимание, что каждое слово case имеет отступ относительно всей конструкции, что помогает её выделить. Также обратите внимание на пробелы перед двоеточиями. Если где-то отсутствует ключевое слово break, то предупреждением об этом должен служить комментарий. Программисты часто забывают ставить это слово, поэтому случай нарочного его пропуска должен описываться специально.
81. Конструкциюtry-catch следует оформлять следующим образом:
try {
statements;
}
catch (Exception& exception) {
statements;
}
Следствие из правила, указанного выше. Вопросы, касающиеся закрывающих фигурных скобок у конструкции if-else, применимы и здесь.
82. Если конструкцияif-else содержит только одно выражение в теле, фигурные скобки можно опускать.
if (condition)
statement;
while (condition)
statement;
for (initialization; condition; update)
statement;
Рекомендуется всё же не опускать фигурные скобки.