русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Цепочка подстановок


Дата добавления: 2015-06-12; просмотров: 636; Нарушение авторских прав


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

Пример: Определение диапазона возможных значений любой целой переменной типа int.

#include <limits.h>

#define RANGE ((INT_MAX) - (INT_MIN) +1)

/*RANGE - диапазон значений для int */

int RANGE_T = RANGE/8;

При работе препроцессора сначала выполняется директива #include <limits.h> - в текст программы вставляется текст из файла limits.h (кратко директива #include уже была рассмотрена в лекции 12).

В данном файле определены константы INT_MAX, INT_MIN, указывающие предельное максимальное и минимальное значение целых величин соответственно. Таким образом, программа принимает вид:

#define INT_MAX 32767

#define INT_MIN -32768

#define RANGE ((INT_MAX) - (INT_MIN) + 1)

/*RANGE - диапазон значений для int*/

int RANGE_T = RANGE/8;

Директива #includeв тексте программы заменилась на соответствующий текст (значения констант могут различаться в зависимости от разрядности ЭВМ).

Далее препроцессор выполняет подстановки в соответствии с двумя первыми директивами #define и программа принимает вид:

#define RANGE ((32767) - (-32768) + 1)

/*RANGE - диапазон Значений для int*/

int RANGE_T = RANGE/8;

В результате выполнения подстановок изменилась строка замещения макроса RANGE в последней директиве #define. После выполнения данной директивы текст программы примет вид:

/*RANGE - диапазон значений для int*/

int RANGE_T = ((32767)-(-32768)+1)/8;

Теперь все директивы #define удалены из текста.

Подстановка строки замещения вместо имени макроса RANGE была выполнена в выражении RANGE/8. Согласно рассмотренным ранее ограничениям не произошло подстановки внутри комментария, а также остался без изменений идентификатор RANGE_T.



<== предыдущая лекция | следующая лекция ==>
Макроопределение без параметров | Параметризованное макороопределение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.971 сек.