Учимся программировать на языке C++

         

ИСПОЛЬЗОВАНИЕ ИМЕНОВАННЫХ КОНСТАНТ


Именованная константа — это просто имя, которому вы присваиваете постоянное значение (константу). Такая константа в отличие от значения переменной не может изменяться по мере выполнения программы. Вы создаете именованную константу, используя директиву препроцессора #define (специальную инструкцию для препроцессора компилятора). Например, следующий оператор определяет именованную константу CLASS_SIZE как значение 50:

#define CLASS_SIZE 50

Чтобы отличить именованную константу от переменной, большинство программистов используют для именованных констант буквы верхнего регистра. Например, следующая программа CONSTANT.CPP определяет и выводит именованную константу CLASS_SIZE:

#include iostream.h

#define CLASS_SIZE 50 // Число студентов в классе

void main(void)

{

cout "Константа CLASS_SIZE равна " CLASS_SIZE endl;

}

Как видите, программа определяет константу, используя директиву #define в начале исходного кода. После того как вы определяете константу, вы можете использовать ее значение на протяжении всей программы, просто обращаясь к имени значения константы.

Замечание: Предыдущее определение константы не заканчивается точкой с запятой. Если вы поставите точку с запятой в конце определения, препроцессор включит ее в ваше определение. Например, если вы в директиве #define предыдущей программы поставите точку с запятой после значения 50, препроцессор в дальнейшем каждый экземпляр константы CLASS_SIZE заменит значением 50 с точкой с запятой (50;), что, очень вероятно, приведет к синтаксической ошибке.

Что такое директивы препроцессора

Прежде чем приступить к компиляции программы, компилятор C++ запускает специальную программу, которая называется препроцессором. Препроцессор ищет в программе строки, начинающиеся с символа #, например #include или #define. Если препроцессор, например, встречает директиву #include, он включает указанный в ней файл в ваш исходный файл, как будто бы вы сами печатали содержимое включаемого файла в вашем исходном коде. Каждая программа, которую вы создали при изучении данной книги, использовала директиву #include, чтобы заставить препроцессор включить содержимое заголовочного файла iostream.h в ваш исходный файл. Если препроцессор встречает директиву #define, он создает именованную константу или макрокоманду. В дальнейшем, если препроцессор встречает имя константы или макрокоманды, он заменяет это имя значением, указанным в директиве #define.


Если вы определяете константы в своих программах, C++ не ограничивает вас в использовании только цифровых значений. Вы можете также использовать константы для хранения символьных строк и значений с плавающей точкой. Например, следующая программа BOOKINFO.CPP использует директиву #define для создания трех констант, которые содержат информацию об этой книге:

#include iostream.h



#define TITLE "Учимся программировать на языке C++"

#define LESSON 37

#define PRICE 22.95

void main(void)

{

cout "Название книги: " TITLE endl;

cout "Текущий урок: " LESSON endl;

cout "Цена: $" PRICE endl;

}

Если вы откомпилируете и запустите эту программу, на экране дисплея появится следующий вывод:

С:\ BOOKINFO ENTER

Название книги: Учимся программировать на языке C++

Текущий урок: 37

Цена: $22.95

Использование #define для создания именованных констант

Для улучшения читаемости ваших программ заменяйте числовые значения в исходном коде константами со смысловыми именами. Для определения именованной константы ваши программы должны использовать директиву препроцессора #define. Размещайте свои константы в верхней части вашего исходного файла. Кроме того, чтобы отличать константы от переменных, большинство программистов для имен констант используют буквы верхнего регистра.

Например, следующая директива #define создает константу с именем SECONDS_PER_HOUR

#define SECONDS_PER_HOUR 3600

Во время компиляции программы препроцессор C++ будет заменять каждый экземпляр имени SECONDS_PER_HOUR числовым значением 3600. Обратите внимание, что определение константы не заканчивается точкой с запятой. Если вы поставите после 3600 точку с запятой, препроцессор C++ в дальнейшем заменит каждый экземпляр имени SECONDS_PER_HOUR его значением с точкой с запятой (3600;), что, очень вероятно, приведет к синтаксической ошибке.


Содержание раздела