Справочник по C/C++
#define

Директива #define используется для выполнения макроподстановок одного текстового фрагмента другим по всему файлу, в который включена эта директива. Общая форма записи директивы #define имеет следующий вид.

#define имя_макроса последовательность_символов

После включения этой директивы каждое вхождение текстового фрагмента, определенное как имя_макроса, заменяется заданным элементом последовательность_символов. Обратите внимание на то, что в этом операторе нет точки с запятой. Кроме того, заданная последовательность_символов завершается только символом конца строки.

Например, если вы хотите использовать значение 1 для слова TRUE и значение 0 для слова FALSE, объявите эти два макроса с помощью отдельных директив tdef ine.

#define TRUE 1
#define FALSE 0

Данные операторы вынудят компилятор подставлять 1 или 0 каждый раз, когда встретится слово TRUE или FALSE соответственно.


Совет программисту

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

ABS(1O-20)

было бы преобразовано в выражение

10-20<0 ? -10-20 : 10-20.

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


Директива #define имеет еще один (более сложный) вариант применения: макрос может иметь аргументы. Макрос, который принимает аргументы, действует во многом подобно функции. Он и выглядит как функция, оставаясь при этом макросом, или макроопределением. Каждый раз, когда компилятор обнаруживает такой макрос, его аргументы заменяются реальными аргументами, заданными в программе, как, например, показано ниже.

#include <iostream>
using namespace std;

#define ABS(a) ((a)<0 ? -(a) : (a))

int main()
{
	cout << "abs of -1 and 1: " << ABS(-l) << ' ' << ABS(1);
	
	return 0;
}

При компиляции этой программы переменная а в макроопределении будет заменена значениями -1 и 1.






Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот:  
Ваш комментарий: