Символьные константы
Магическое число - литерал, обычно числовой, который не имеет никакого конекста:
// что такое 30?
int max = 30 * min;
Использовать магические числа является плохой практикой, во-первых, не понятно что оно значит, во-вторых, что бы его изменить нужно изменить везде где оно используется!
Вместо магических чисел намного удобнее использовать символьные константы - те же магические числа, только с идентификатором. Есть несколько способов их объявить:
Использовать макросы в качестве символьных констант (старый)
Во время компиляции препроцессор заменит все идентификаторы GREEN на литерал 12:
#define GREEN 12
...
int color = GREEN * 2;
У такого подхода есть минусы:
- Директива define имеет глобальную область видимости
- Символьные константы объявленные через макросы не заменяются во время отладки
- Еще
Использовать переменные со спецификатором const
Такие переменные соответствуют всем правилам обычных переменных (и в области видимости):
const int green(10);
Хороша практика
Хорошей практикой является создать отдельный header с константами и include его везде, где нужны константы:
// constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_H
namespace constants
{
const double pi(3.14159);
const int green { 3 }; // так тоже можно инициализировать
}
#endif
// main.cpp
double circle_len = 2 * constants::pi * radius;