Макросы в C они очень важны, но в C++ применяются гораздо меньше. Первое правило относительно них такое: не используйте их, если вы не обязаны это делать. Как было замечено, почти каждый макрос проявляет свой изъян или в языке, или в программе. Если вы хотите использовать макросы, прочитайте, пожалуйста, вначале очень внимательно руководство по вашей реализации C препроцессора.
Простой макрос определяется так:
#define name rest of line
Когда name встречается как лексема, оно заменяется на rest of line.
Например:
named = name
после расширения даст:
named = rest of line
Можно также определить макрос с параметрами.
Например:
#define mac(a,b) argument1: a argument2: b
При использовании mac должно даваться две строки параметра. После расширения mac() они заменяют a и b.
Например:
expanded = mac(foo bar, yuk yuk)
послерасширениядаст
expanded = argument1: foo bar argument2: yuk yuk
Макросы обрабатывают строки и о синтаксисе C++ знают очень мало, а о типах C++ или областях видимости - ничего. Компилятор видит только расширенную форму макроса, поэтому ошибка в макросе диагностируется когда макрос расширен, а не когда он определен. В результате этого возникают непонятные сообщения об ошибках.
Вот такими макросы могут быть вполне:
#define Case break;case
#define nl <<"n"
#define forever for(;;)
#define MIN(a,b) (((a)<(b))?(a):(b))
Вот совершенно ненужные макросы:
#define PI 3.141593
#define BEGIN {
#define END }
А вот примеры опасных макросов:
#define SQUARE(a) a*a
#define INCR_xx (xx)++
#define DISP = 4
Чтобы увидеть, чем они опасны, попробуйте провести расширения в следующем примере:
int xx = 0; // глобальный счетчик
void f() {
int xx = 0; // локальная переменная
xx = SQUARE(xx+2); // xx = xx+2*xx+2
INCR_xx; // увеличивает локальный xx
if (a-DISP==b) { // a-= 4==b
// ...
}
}
Если вы вынуждены использовать макрос, при ссылке на глобальные имена используйте операцию разрешения области видимости :: и заключайте вхождения имени параметра макроса в скобки везде, где это возможно (см. MIN выше).
Обратите внимание на различие результатов расширения этих двух макросов:
#define m1(a) something(a) // глубокомысленный комментарий
#define m2(a) something(a) /* глубокомысленный комментарий */
например,
int a = m1(1)+2;
int b = m2(1)+2;
pасширяется в
int a = something(1) // глубокомысленный комментарий+2;
int b = something(1) /* глубокомысленный комментарий */+2;
С помощью макросов вы можете разработать свой собственный язык. Скорее всего, для всех остальных он будет непостижим. Кроме того, C препроцессор - очень простой макропроцессор. Когда вы попытаетесь сделать что-либо нетривиальное, вы, вероятно, обнаружите, что сделать это либо невозможно, либо чрезвычайно трудно.
Другие работы по теме:
Макроси Запис виконання та правка
Реферат на тему: Автоматизація виконання задач за допомогою макросів Макрос — це серія команд, що згруповані разом для спрощення повсякденної роботи. Макроси часто використовуються для таких цілей:
«Word. Автоматизация решения задач. Макросы»
Хорошую услугу в решении этой проблемы могут оказать макросы. Современные приложения Microsoft Office имеют для этого соответствующий инструментарий, ориентированный на неподготовленного пользователя. Макросы обычно используются для автоматизации повторяющейся последовательности действий
Полиморфные Вектора
У вас есть другая возможность - определить ваш векторный и другие вмещающие классы через указатели на объекты некоторого класса.
База данных расписания поездов
Сущность и основные функции СУБД Microsoft Access. Алгоритм создания базы данных расписания поездов и параметров их передвижения. Проектирование форм для сводных таблиц с помощью конструктора окон. Разработка отчетов и запросов на выборку данных.
СУБД Microsoft Access о расписании поездов
Разработка базы данных "Расписание поездов", которая позволит узнавать все сведения о движение поездов: пункт отправления и прибытия поезда, время отправления и прибытия с начальной и конечной станции, цены и льготы. Руководство по ее использованию.
База данных "Фирма"
Информация о работе фирмы. Даталогическое проектирование, создание новых запросов, форм и макросов. Таблицы описания структуры отношений. Рабочее проектирование, формы "Заказ", "Клиент", "Товары", "Паспортные данные". Составление отчета по продажам.
Форматированный ввод
Лисповская функция чтения READ. Интерпретатор. Вызов READ. Построенные структуры. Внешние устройства и доступ к ним. Типы потоков и операции используемые для ввода и вывода. Действие макроса. Запись символов и макроинтерпретаций. Системная переменная.
Анализ алгоритма вируса
На мой взгляд, наиболее удобным для хранения и анализа вируса объектом является файл, содержащий его (вируса) тело. Как показывает практика, дляанализа
Использование макросов для программирования в MS ACCESS
Постановка задачи. Использование макросов в конкретном приложении предлагается рассмотреть на примере следующей задачи. При открытии базы данных "АРМ FORMSNAVIGATOR 1.0" сначала на экран выводится приглашение к работе и затем открывается основное окно навигатора.
Изучение EXCEL
Институт дистантного образования Российского университета дружбы народов Факультет: ЮРИДИЧЕСКИЙ По курсу: “Информатика” Р Е Ф Е Р А Т на тему: Изучение “Microsoft Excel ”.
Работа с базами данных
Microsoft Access как мощное приложение, предлагающее широкий диапазон средств для эффективного управления информацией, оценка его возможностей, содержание и назначение. Создание и заполнение таблицы базы данных о студентах в режиме конструктора.
Создание домашней фонотеки в MS Access
Автоматизированная информационная система домашней фонотеки. Формирование реляционной модели данных, взаимосвязей между таблицами. Создание запросов для формирования условий отбора интересующей пользователя информации, форм для ввода данных и отчетов.
Стандартная библиотека на С++: алгоритм
Рассмотрение составляющих элементов стандартной библиотеки (программирование функций, глобальные переменные, шаблоны, макросы, классы), основных компонентов (контейнер, итератор, адаптер, функциональный объект) и алгоритмов языка программирования С++.
Процессор MS Word
Строка Меню текстового процессора и панель инструментов Форматирование текстового процессора MS Word, назначение основных команд и кнопок. Технология формирования (расчета) ведомости выдачи заработной платы средствами табличного процессора MS Excel.
Анализ макросов в Microsoft Office Word 2007
Изучение понятия, видов и методов создания стандартных макросов Microsoft Office Word - набора инструкций, которые сообщают программе, какие действия следует выполнить, чтобы достичь определенной цели. Функции макрорекордера. Редактирование макросов.
Научно-методическая деятельность преподавателей
Возможности системы управления базами данных Access. Структура простейшей базы данных: свойства ее полей, типы данных, безопасность и режим работы. Определение связей между таблицами в базе данных. Использование запроса на выборку, макроса и отчетов.
Создание форм в Microsoft Access 2003
Методы создания главной кнопочной формы с целью навигации по базе данных, так как она может использоваться в качестве главного меню БД. Создание подчиненных кнопочных форм: отчеты, формы, запросы. Элементы кнопочной формы запроса "Успеваемость студентов".
Управление подключением макросов в приложениях Office
Приложения Office (начиная с 2000) имеют три уровня безопасности для управления загрузкой макросов, а также возможность использования цифровой подписи. С помощью этих механизмов можно более гибко управлять режимами загрузки.
Макровирусы
В этой главе рассказано о макровирусах. Подробно описана процедура и методы заражения файлов. Представлен исходный текст макровируса с подробными комментариями. Приведены основные сведения о языке VBA.
Проектирование базы данных магазина по сборке компьютеров
Характеристика магазина по сборке компьютеров. Формирование реляционной модели базы данных: заказы, комплектующие, покупатели, продажи; запросы на выборку, формы для ввода данных, кнопочная форма, отчеты для руководителя, счета для покупателей и макросы.
Объекты базы данных
База данных это совокупность данных которые обладает свойствами структурированности и взаимно связанности, а также не зависимости от прикладных программ. Чтобы оперировать данными составляющие базу необходимо от дельная программа системами управления базами данных – это управляющая программа предназначенная для хранение, поиска и обработки данных в базе.
База данных Фирма
Федеральное агентство по образованию Р Ф ГОУ ВПО Уральский Государственный Технический Университет-УПИ Кафедра вычислительной техники БАЗА ДАННЫХ "ФИРМА"
Выполнение арифметических действий и строковых операций
АННОТАЦИЯ Сердце персонального компьютера - микропроцессор, выполняющий арифметические, логические и вспомогательные операции, необходимые для решения задач. Первые микропроцессоры появились в конце 1960-х годов, когда исследователи и разработчики создали интегральную схему (ИС), содержащую различные электронные компоненты на едином кристалле полупроводника.
Отчет по циклу лабораторных работ
Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Информатика 4
Міністерство освіти і науки України Металургійний технікум ЗДІА РОБІТНИЧЕ СЕРЕДОВИЩЕ MS ACCESS. ВІКНА, МЕНЮ І ПАНЕЛІ ІНСТРУМЕНТІВ MS ACCESS” Звіт з практичної роботи №1
Текст и текстовые процессоры
Министерство общего и профессионального образования РФ Ульяновский государственный технический университет Кафедра «Информационные системы и технологии»
Макровирусы
МАКРО ВИРУСЫ В этой главе рассказано о макровирусах. Подробно опи- сана процедура и методы за- ражения файлов. Представлен исходный текст макровируса
Создание макросов в т.р. Word
Стельмашук Н., Б-39 Отчет по лабораторной работе № 3 Тема: Создание макросов в т.р. Word. Задание: Создание макроса для оформления шаблона документа blank.dot
Возможности Excel
Большинство пользователей постепенно осваивают те возможности Excel, которые наиболее пригодны для создания документов нужного им типа. Определив для себя оптимальное количество требуемых инструментов, они, как правило, оставляют без внимания множество средств и функций программы. Наиболее честолюбивые пользователи, для того чтобы облегчить доступ к привычным командам, изменяют пользовательский интерфейс Excel.
Создание макросов
Запись макроса При записи макроса все необходимые действия записываются программой записи макроса. Перемещение по ленте не включается в записанные шаги.