Skip to the content.

Символьные константы


Магическое число - литерал, обычно числовой, который не имеет никакого конекста:

// что такое 30?
int max = 30 * min;

Использовать магические числа является плохой практикой, во-первых, не понятно что оно значит, во-вторых, что бы его изменить нужно изменить везде где оно используется!

Вместо магических чисел намного удобнее использовать символьные константы - те же магические числа, только с идентификатором. Есть несколько способов их объявить:

Использовать макросы в качестве символьных констант (старый)

Во время компиляции препроцессор заменит все идентификаторы GREEN на литерал 12:

#define GREEN 12
...
int color = GREEN * 2;

У такого подхода есть минусы:

Использовать переменные со спецификатором 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;