
- •Лекция 2
- •Базовые элементы языка программирования
- •Категории лексем
- •Идентификаторы
- •Ключевые слова
- •Зарезервированные идентификаторы
- •Стандартные идентификаторы
- •Идентификатор пользователя
- •Константы
- •Литералы
- •Целые константы
- •Вещественные константы
- •Булевские (логические) константы
- •Символьные константы
- •Строковые константы
- •Именованные типизированные константы
- •Перечислимые константы
- •Препроцессорные константы
- •Знаки операций
- •Знаки пунктуации
- •Разделители
- •Пробельные разделители
- •В результате изучения материала лекции необходимо знать
Перечислимые константы
Константы перечислимого типа вводятся с помощью ключевого слова enum. Это обычные целочисленные константы, которым приписаны уникальные и удобные для использования обозначения (идентификаторы, отражающие назначение, смысл константы):
enum {one=1, two=2, three=3}; // one, two, three – условные имена,
//введенные для обозначения констант
enum color {red, yellow, green}; //значения приписываются по умолчанию: red=0,…
// color – название перечислимого типа
enum {red=10, yellow=3, green=4}; //приписываются указанные значения: red=10 и т.д.
enum {red=10, yellow=3, green=10};
enum {red=10, yellow=3, green=red*10};
enum {red=-2, yellow, green};
Препроцессорные константы
Препроцессорные константы – также возможный способ определения констант в С++. Для этого используется директива препроцессора #define :
#define IDENTIFICATOR ZAMENA
Эта директива вызывает замену в тексте программы каждого появления имени IDENTIFICATOR на текст ZAMENA.
Например:
#define MAX_LEN 100 //в программе имя MAX_LEN заменится на 100
С помощью директивы #define можно выполнять «настройку» программы. Например, если в программе предполагается работать с массивом, то его размер можно явно определить на этапе препроцессорной обработки заданием именованного литерала:
исходный текст |
результат препроцессорной обработки |
#define K 40 int main () {int M[K] [K]; float A[K], B[K] [K];……. |
int main () {int M[40] [40]; float A[40], B[40] [40]; |
При таком описании легко изменять предельные размеры сразу всех массивов, изменив только одно значение в команде #define. В то же время сегодня такой способ определения именованных констант в С++ используется редко.
Обратите внимание на особенности работы с константами:
1. Примеры определений целой константы:
const int I = 7; // целая константа
//I = 9; неверно, значение константы не должно изменяться
// const int J; неверно, отсутствует начальное значение константы
const int K(4); // верно, инициализация целой константы
2. Примеры определений символьной константы:
const char C='1';
const char D=49; // 49 – это код ‘1’ в 10-ичной с/с
const char DD=061; // 61 – это код ‘1’ в 8-ичной с/с
const char DDD=0x31; // 31 – это код ‘1’ в 16-ичной с/с
const char ED='\0x31'; //задание символьной константы ESC-последовательностью в 16 с/с
const char EDD='\61'; //задание символьной константы ESC-последовательностью в 8 с/с
3. Примеры определений вещественной константы:
const float F = 1.5f;
const double DF = 1.5;
const long double D = -3.7L;
const double EXPF = 5.55e-12;
4. Для уточнения типа константы можно использовать суффикc:
123 //тип signed int
11234L или 11234l //тип signed long int
123U или 123u //тип unsigned int
2.78F или 2.78f //тип float
2.78 //тип double
2.78L или 2.78l //тип long double
5. Следующие объявления констант не эквивалентны:
const int K = 7;
#define K 7
В первой строке определяется именованная типизированная константа – переменная, занимающая некоторую область памяти, а во второй – препроцессорная константа.