Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
15
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

Что вам необходимо знать

Чтобы увеличить количество приложений, поддерживаемых вашей программой, C++ позволяет использовать аргументы командной строки. Из урока 37 вы узнаете, как с помощью макрокоманд и констант можно упростить ваше программирование или создать более удобочитаемый код. Однако, прежде чем перейти к уроку 37, убедитесь, что вы освоили следующие основные концепции:

  1. Когда вы запускаете программу из системной подсказки, информация которую вы вводите, становится командной строкой программы.

  2. Чтобы позволить вашим программам обращаться к командной строке C++ передает функции main два параметра: argc и argv.

  3. Параметр argc содержит количество аргументов командной строки.

  4. Параметр argv представляет собой массив указателей на символьные строки, каждая из которых содержит аргумент командной строки.

  5. В зависимости от вашего компилятора программа может обращаться к третьему параметру main с именем env,который представляет собой массив указателей на символьные строки, содержащие переменные среды.

УРОК 37. ИСПОЛЬЗОВАНИЕ КОНСТАНТ И МАКРОКОМАНД

Чтобы улучшить удобочитаемость программы, C++ поддерживает именованные константы и макрокоманды. Например, используя именованную константу, вы можете заменить цифровое значение, такое как 50, внутри вашего исходного кода смысловой константой, такой как CLASS_SIZE. Когда ругой программист читает ваш код, он не сможет предположить, что означает цифровое значение 50. Если же вместо этого он каждый раз будет видеть СLASS_SIZE, то он поймет, что это значение соответствует числу студентов в классе. Аналогично, используя макрокоманды, ваши программы могут заменить сложные выражения типа

result = (х*у-3) * (х*у-3) * (х*у-3);

вызовом функции с именем CUBE, как показано ниже:

result = CUBE(x*y-3);

В данном случае макрокоманда не только улучшает удобочитаемость вашего кода, но и упрощает ваш оператор, уменьшая вероятность ошибки. Этот урок рассматривает именованные константы и макрокоманды более подробно. К концу данного урока вы освоите следующие основные концепции:

  • Чтобы сделать программы легче для чтения, программисты часто заменяют цифровые значения более понятными по смыслу именованными константами.

  • Используя именованные константы в вашей программе вместо цифровых значений, вы можете сделать свои программы более легкими для изменения в будущем.

  • C++ позволяет программам заменять выражения смысловыми именами макрокоманд.

  • До компиляции программы компилятор C++ запускает специальную программу, называемую препроцессором, чтобы заменить каждую константу или макрокоманду соответствующим значением.

  • Макрокоманды выполняются быстрее, чем функции, но увеличивают размер выполняемой программы.

  • Большинство компиляторов 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;), что, очень вероятно, приведет к синтаксической ошибке.