Название: Макросы в C++
Вид работы: статья
Рубрика: Информатика и программирование
Размер файла: 13.85 Kb
Скачать файл: referat.me-140450.docx
Краткое описание работы: Как было замечено, почти каждый макрос проявляет свой изъян или в языке, или в программе. Если вы хотите использовать макросы, прочитайте, пожалуйста, вначале очень внимательно руководство по вашей реализации C препроцессора.
Макросы в C++
Макросы в 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 препроцессор - очень простой макропроцессор. Когда вы попытаетесь сделать что-либо нетривиальное, вы, вероятно, обнаружите, что сделать это либо невозможно, либо чрезвычайно трудно.
Похожие работы
-
Анализ макросов в Microsoft Office Word 2007
Изучение понятия, видов и методов создания стандартных макросов Microsoft Office Word - набора инструкций, которые сообщают программе, какие действия следует выполнить, чтобы достичь определенной цели. Функции макрорекордера. Редактирование макросов.
-
Создание домашней фонотеки в MS Access
Автоматизированная информационная система домашней фонотеки. Формирование реляционной модели данных, взаимосвязей между таблицами. Создание запросов для формирования условий отбора интересующей пользователя информации, форм для ввода данных и отчетов.
-
Создание форм в Microsoft Access 2003
Методы создания главной кнопочной формы с целью навигации по базе данных, так как она может использоваться в качестве главного меню БД. Создание подчиненных кнопочных форм: отчеты, формы, запросы. Элементы кнопочной формы запроса "Успеваемость студентов".
-
Создание splash-заставки
Думаю многие знают, что такое splash-картинка, но все же поясню: это картинка, которая предшествует запуску основной программы и обычно отображается во время загрузки программы
-
Управление подключением макросов в приложениях Office
Приложения Office (начиная с 2000) имеют три уровня безопасности для управления загрузкой макросов, а также возможность использования цифровой подписи. С помощью этих механизмов можно более гибко управлять режимами загрузки.
-
Использование макросов для программирования в MS ACCESS
Постановка задачи. Использование макросов в конкретном приложении предлагается рассмотреть на примере следующей задачи. При открытии базы данных "АРМ FORMSNAVIGATOR 1.0" сначала на экран выводится приглашение к работе и затем открывается основное окно навигатора.
-
Изучение EXCEL
Институт дистантного образования Российского университета дружбы народов Факультет: ЮРИДИЧЕСКИЙ По курсу: “Информатика” Р Е Ф Е Р А Т на тему: Изучение “Microsoft Excel ”.
-
Система компьютерной обработки данных
Система компьютерной обработки данных для сбора, систематизации, статистической обработки, анализа результатов учебного процесса за четверть, полугодие, год. Модуль обработки данных о качестве обучения, итогов успеваемости и данных о движении учащихся.
-
Форматированный ввод
Лисповская функция чтения READ. Интерпретатор. Вызов READ. Построенные структуры. Внешние устройства и доступ к ним. Типы потоков и операции используемые для ввода и вывода. Действие макроса. Запись символов и макроинтерпретаций. Системная переменная.
-
Макровирусы
В этой главе рассказано о макровирусах. Подробно описана процедура и методы заражения файлов. Представлен исходный текст макровируса с подробными комментариями. Приведены основные сведения о языке VBA.