#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. |
Нет комментариев. Оставить комментарий: |