|
Глава 4 - КОНСТАНТЫ И ПРЕПРОЦЕССОР ЯЗЫКА Си |
Страница 4 из 12
Иногда возникает необходимость использовать в программах константы. Например, оператор, позволяющий определять длину окружности, можно было бы записать в следующем виде circ = 3.14 * diameter, Приведенная здесь константа 3. 14 - известное число p. Чтобы ввести ту или иную константу в программу, нужно указать ее фак тическое значение, как было сделано выше. Однако существуют веские причины использовать вместо этого "символические кон станты", например, мы могли бы применять оператор circ = pi * diameter, а позже компилятор подставил бы в него фактическое значение константы. owed = 0 015 * housevl, owed = taxrate * housevl, Если мы изучаем большую программу, то второй вариант будет нам более понятен. Теперь осталось выяснить, как можно создать такую символическую константу? Первый способ заключается в том, чтобы описать некоторую переменную и положить ее равной требуемой константе. Мы могли бы сделать это следующим образом float taxrate, taxrate = 0 015, Такой способ подходит для небольшой программы, в других же случаях он несколько неэкономичен, поскольку каждый раз при использовании переменной taxrate компьютер должен будет обращаться к той ячейке памяти, которая отведена данной переменной Это служит примером подстановки "во время выполнения", так как она производится именно при выполнении программы. К счастъю, в языке Си имеется и другой, лучший способ. Этот способ реализуется с помощью препроцессора языка Си В гл. 2 мы уже видели, как препроцессор использует директиву #include для включения информации из другого файла в программу. Кроме того, препроцессор дает нам возможность задавать константы Для этого в начало файла, содержащего вашу программу, необходимо добавить только одну строку, аналогичную следующей #define TAXRATE 0.015 При компиляции программы каждый раз, когда появится переменная TAXRATE, она будет заменяться величиной 0.015. Это называ ется подстановкой "во время компиляции". К тому моменту, когда вы начнете выполнение своей программы, все подстановки будут уже сделаны. Несколько замечаний по поводу формата. Сначала идет ключевое слово #define. Оно должно начинаться с самой левой позиции. Потом следует символическое имя константы, а затем ее величина. Символ "точка с запятой" не используется, поскольку это не оператор языка Си. Почему имя TAXRATE пишется прописными буква ми? В процессе использования языка Си выработалась традиция писать константы прописными буквами. Если при просмотре программы вам встретится имя, написанное прописными буквами, вы сразу поймете, что имеете дело с константой, а не с переменной. Это еще один способ улучшить читаемость программы. Ваша программа будет работать даже и тогда, когда вы будете писать кон станты строчными буквами, но при этом вы должны чувствовать свою вину, поскольку нарушаете традицию. /* пицца */
Использование спецификации %1.2f в операторе printf( ) приведет к тому, что при печати результаты будут округлены до двух десятичных цифр. Мы понимаем, конечно, что написанная выше программа может и не отражать ваши собственные вкусы, касаю щиеся пиццы, но во множестве программ, посвященных этому вопросу, она займет свое скромное место. Вот один из примеров ее выполнения. Чему равен радиус вашей пиццы ? 6.0 Директиву #define можно также использовать для определения символьных и строковых констант. Необходимо использовать знак "апостроф" в первом случае и кавычки - во втором. Примеры, приведенные ниже, вполне правомерны #define ВЕЕР '\007' А теперь мы хотим обрадовать лентяев. Предположим, вы раз рабатываете целый пакет программ, использующих один и тот же набор констант. Вы можете произвести следующие действия: Тогда, если вы будете выполнять программу, препроцессор прочтет файл с именем const.h и использует все директивы #define вашей программы. Получилось так, что символ .h в конце имени файла напомнит вам, что этот файл является "заголовком", т.е. в нем содержится вся информация, которая должна попасть в начало вашей программы. Самому препроцессору безразлично, используете ли вы символ .h в имени файла или нет. |
|