Шрифт:
Несколько замечаний по поводу формата.
Сначала идет ключевое слово #define. Оно должно начинаться с самой левой позиции. Потом следует символическое имя константы, а затем ее величина. Символ "точка с запятой" не используется, поскольку это не оператор языка Си. Почему имя TAXRATE пишется прописными буква ми? В процессе использования языка Си выработалась традиция писать константы прописными буквами. Если при просмотре программы вам встретится имя, написанное прописными буквами, вы сразу поймете, что имеете дело с константой, а не с переменной. Это еще один способ улучшить читаемость программы. Ваша программа будет работать даже и тогда, когда вы будете писать константы строчными буквами, но при этом вы должны чувствовать свою вину, поскольку нарушаете традицию.
Приведем простой пример:
/* пицца */
#define PI 3,14159
main /* изучение вашей пиццы */
{
float area, circum, radius;
printf("Чемy равен радиус вашей пиццы? \n");
scanf("%f", &radius);
area = PI * radius * radius;
printf(" Основные параметры вашей пиццы следующие \n");
printf(" длина окружности = %1.2f, площадь =%1.2f \n circum, area);
}
РИС.4.5. Обработка текста программы препроцессором
Использование спецификации %1.2f в операторе printf приведет к тому, что при печати результаты будут округлены до двух десятичных цифр. Мы понимаем, конечно, что написанная выше программа может и не отражать ваши собственные вкусы, касающиеся пиццы, но во множестве программ, посвященных этому вопросу, она займет свое скромное место. Вот один из примеров ее выполнения:
Чему равен радиус вашей пиццы? 6.0
Основные параметры вашей пиццы следующие: длина окружности = 37.70,
площадь окружности = 113.40.
Директиву #define можно также использовать для определения символьных и строковых констант. Необходимо использовать знак "апостроф" в первом случае и кавычки - во втором. Примеры, приведенные ниже, вполне правомерны
#define ВЕЕР '\007'
#define ESS 'S'
#deline NULL '\0'
#define OOPS "Ну вот, вы и сделали это!"
А теперь мы хотим обрадовать лентяев. Предположим, вы разрабатываете целый пакет программ, использующих один и тот же набор констант. Вы можете произвести следующие действия:
1. Соберите все ваши директивы #define в один файл и назовите его, например, const.h.
2. В начало каждого файла, содержащего программу, включите директиву #include "const.h."
Тогда, если вы будете выполнять программу, препроцессор прочтет файл с именем const.h и использует все директивы #define вашей программы. Получилось так, что символ .h в конце имени файла напомнит вам, что этот файл является "заголовком", т.е. в нем содержится вся информация, которая должна попасть в начало вашей программы. Самому препроцессору безразлично, используете ли вы символ .h в имени файла или нет.
Язык Си - искусный фокусник: создание псевдоимен
Возможности директивы #define не исчерпываются только символическим представлением констант. Рассмотрим, например, cледующую программу:
#include "alias. h"
program begin
whole yours, mine then
spitout(" Введите, пожалуйста, целое число.\n" )
then takem(" %d", & yours)
then mine = yours times TWO then
spitout(" %d в два раза больше вашего числа! \n" , mine) then end
Странно, текст что-то смутно напоминает, язык немного похож на Паскаль, но программа не похожа на Си-программу. Секрет лежит, конечно, в файле с именем alias.h. Давайте посмотрим, что в нем содержится?
alias. h #define program main
#define degin { #define enf } #define then;