Основы программирования

Глава 4 - Язык Си - искусный фокусник: создание псевдоимен
Индекс материала
Глава 4
СИМВОЛЬНЫЕ СТРОКИ - ВВЕДЕНИЕ
Длина строки - функция strlen( )
КОНСТАНТЫ И ПРЕПРОЦЕССОР ЯЗЫКА Си
Язык Си - искусный фокусник: создание псевдоимен
ИЗУЧЕНИЕ И ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ printf( ) И scanf( )
Использование функции printf( )
Модификаторы спецификации преобразования, используемые в функции printf( )
Использование функции printf( ) для преобразования данных
Применение функции scanf( )
СОВЕТЫ ПО ПРИМЕНЕНИЮ
ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
Все страницы

Возможности директивы #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;
#define takein scanf
#define spilout printf
#define TWO 2
#define times *
#define whole int

Этот пример иллюстрирует, как работает препроцессор. Он просматривает вашу программу и проводит поиск элементов, определяемых директивами #define. Обнаружив такие элементы, он полностью заменяет их. В нашем примере во время компиляции все слова then заменяются символами "точка с запятой", end - } и т.д. Результирующая программа будет полностью идентична той, которую мы могли бы получить, если бы с самого начала писали ее в обычных терминах языка Си.

Эту мощную возможность языка можно использовать для задания макрокоманд, являющихся одним из вспомогательных средств программирования. Мы вернемся к обсуждению этой темы в гл. 11.

Теперь необходимо упомянуть о некоторых ограничениях. На-пример, части программы, заключенные в кавычки, закрыты для подстановок. Операторы, приводимые ниже, служат иллюстрацией такого положения:

#define MN "минимифидианизм"
printf(" Oн глубоко верил в MN.\n");

Распечатка будет выглядеть так:

Oн глубоко верил в MN.

Однако после выполнения оператора

printf(" Он глубоко верил в %s.\n" , MN);

мы получим следующий результат:

Он глубоко верил в минимифидианизм.

В последнем случае константа с именем MN находилась вне кавычек и поэтому была заменена соответствующим значением.
Препроцессор языка Си является полезным вспомогательным средством, поэтому при написании программ старайтесь пользоваться преимуществами, которые он предоставляет. По мере изложения мы покажем вам дополнительные возможности применения препроцессора.



 
озон