|
||||
|
18. Применение директивРассмотрим пример: #define WIDTH 80 #define LENGTH (WIDTH+10) Данные директивы заменят в тексте программы каж дое слово WIDTH на число 80 и любое слово LENGTH н выражение (80+10) вместе с окружающими его скобками Скобки, которые содержатся в макроопределении дают возможность избежать недоразумений, связан ных с порядком вычисления операций. К примеру, есл1 в скобках выражение t = LENGTH*7 будет преобразова но в выражение t = 80 + 10*7, а не в выражение t = (80 – + 10)*7, как это получается, если есть скобки, в резуль тате будем иметь 780, а не 630. Во второй синтаксической форме в директиве #define присутствует список формальных параметров, которы может включать в себя один или несколько идентифика торов, которые разделены запятыми. Формальные пара метры в тексте макроопределения отмечают позиции на которые должны быть подставлены фактические ар гументы макровызова. Любой формальный параметр способен появиться в тексте макроопределения несколь ко раз. При макровызове за идентификатором следует спи сок фактических аргументов, количество которых сле дует сделать совпадающим с количеством формальны параметров. Пример: #define MAX(x,y) ((x) > (y))?(x): (y) Приведенная директива заменит фрагмент t = = MAX(i,s[i]) на выражение t = ((i) > (s[i])?(i): (s[i]). Как и в ранее приведенном примере, круглые скобки, в которые заключены формальные параметры макроопределения, дают возможность избежать ошибок, связанных с неправильным порядком осуществления, если фактические аргументы являются выражениями. Например, если есть скобки, фрагмент t = MAX(i&j, s[i]||j) будет заменен выражением t = ((i&j) > (s[i]||j)?(i&j): (s[i]||j); а если скобок нет – фрагментом t = (i&j>s[i]||j)?i&j: s[i]||j; где условное выражение вычисляется в другом порядке. Директива #undef применяется для отмены действия директивы #define. Синтаксис данной директивы следующий: #undef идентификатор. Директива отменяет операцию текущего определения #define для определенного идентификатора. |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Другие сайты | Наверх |
||||
|