Константы в C(Си)

👁 27 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Константы в Си можно определить 2 базовыми способами

  1. через препроцессор: #define MYCONST ‘A’;
  2. через ключевое слово: const char MYCONST ‘A’.

В первом случае это будет не совсем константа в привычном понимании языка Си, а макроподстановка, которая выполнится в процессе компиляции, а во втором случае для этого используется специальное ключевое слово, которое реально указывает на то, что это есть константа. Значение константы нельзя менять за все время выполнения программы и если поменять, то будет выкинута ошибка присвоения.

Путаница связана главным образом с заблуждением о том, что #define объявляет константу. Это неверно.

define — макроподстановка, предназначенная для обработки препроцессором.

Настоящая константа в C записывается как:

const int alpha = 3;
const char beta[]="beta";

Разница состоит в том, что макроподстановку препроцессор чисто механически воткнет во все места в исходном тексте, где она встречается.

В то же время, константу обрабатывает компилятор, на более высоком, «умном» уровне. Обратите внимание, что у настоящей константы есть тип — это означает, что глупая ошибка вроде «число вместо строки» просто не откомпилируется. А вот с макроподстановкой такой номер может не пройти.

Одно из важных правил — макроподстановкам нужно всегда предпочитать константы, чтобы избежать чудесных глюков.