 |
1, 7, 13, 19, 25...) и вы перемещаете курсор в столбец 18 прежде,
чем набрать первый символ, редактор дополнит два символа табуля-
ции (до 13-го столбца) и пять пробелов (до столбца 18).
Определение парности (Match Pair)
-----------------------------------------------------------------
Эта операция выполняется во время отладки исходного файла, в
котором множество функций, выражений, комментариев и ряд других
конструкций, для которых используются парные разделители. Дейс-
твительно, в вашем файле встречаются:
- 385,386 -
- фигурные скобки {};
- угловые скобки <>;
- круглые скобки ();
- квадратные скобки [];
- маркеры комментариев /**/;
- двойные кавычки "";
- одинарные кавычки ''.
Поиск сравнения отдельных парных конструкций выполняется до-
вольно хитроумно. Предположим, что вы имеете сложное выражение с
вложенными подвыражениями. Вы хотите узнать, имеет ли это выраже-
ние несбалансированные скобки. Или, скажем, вы находитесь в нача-
ле функции, которая проходит через несколько экранов, а вам пот-
ребовалось перейти сразу в конец этой функции. Решение этих задач
с помощью команд сравнения парности Турбо Си в ваших руках. Вы
должны выполнить следующие операции:
1. Поместите курсор на разделитель, которым вы интересуетесь
(например, открытая скобка какой-то функции, которая проходит че-
рез ряд экранов).
2. Для поиска парного разделителя к выбранному достаточно
нажать Ctrl-Q Ctrl-[. (В данном примере закрывающая скобка должна
быть в конце функции).
3. Редактор немедленно переместит курсор на разделитель, ко-
торый соответствует выбранному вами. Если курсор переместится на
разграничитель, который вы имели ввиду, значит этот кусок вашей
программы не содержит непарных разделителей этого типа. Если кур-
сор переместится на неправильный разделитель, то у вас ошибка.
Теперь все, что от вас требуется, это найти ее.
Некоторая информация об определении парности
-----------------------------------------------------------------
Мы уже рассказали вам основы команд "Match Pair" Турбо Си.
Теперь хотим дать информацию, что вы сможете и не сможете делать
с помощью этих команд. Мы хотим также обратить ваше внимание на
некоторые тонкости. Это касается следующих вопросов:
1. Есть две редактирующие команды Match Pair: одна для вы-
- 387,388 -
полнения сравнения парности вперед (Ctrl-Q Ctrl-[), дру-
гая для сравнения парности назад (Ctrl-Q Ctrl-]).
2. Способ, с помощью которого редактор ищет разграничители
комментария (/**/), мало чем отличается от способа поиска
других типов разделителей.
3. Если парный разделитель к тому, который вы выбрали, не
найден, редактор не переместит курсор.
Дирекционное и недирекционное сравнение
-----------------------------------------------------------------
Необходимо использовать две команды Match Pair в связи с
тем, что некоторые разграничители дирекционные (указывающие нап-
равление поиска), другие - нет.
Например, предположим, вы задаете редактору поиск, указывая
на открывающуюся фигурную ({) или квадратную ([) скобку. Редактор
знает, что закрывающаяся скобка может быть только впереди, и вы-
бирает поиск в этом направлении. Открывающиеся фигурные и квад-
ратные скобки являются дирекционными. Редактор знает, в каком
направлении вести поиск, поэтому нет различия в том, какую коман-
ду задавать. Вы можете задать любую команду, при этом редактор
будет вести поиск в правильном направлении.
Аналогично, если вы зададите закрывающуюся фигурную (}) или
квадратную (]) скобку, то редактор, зная в каком направлении на-
ходится открывающая скобка, ведет поиск назад. В этом случае,
также нет различия, какую задавать команду. Редактор всегда будет
вести поиск в правильном направлении.
Однако, если вы зададите редактору поиск двойных (") или
одинарных (') кавычек, то он не будет знать, в каком направлении
искать пару. Вы должны задать направление поиска путем подачи
правильной команды Match Pair. Если вы задаете команду CtrlQ Ctrl
-[, то редактор будет вести поиск вперед по программе, а если ко-
манду Ctrl-Q Ctrl-], то назад.
В следующей таблице приведены парные разграничители. Опреде-
лены разграничители, являющиеся дирекционными и вложенными (опре-
деление вложенных разграничителей будет дано сразу после табли-
цы).
- 389,390 -
-----------------------------------------------------------------
Парные разграничители Определяют направ- Являются
ление поиска вложенными
-----------------------------------------------------------------
{ } Да Да
( ) Да Да
[ ] Да Да
< > Да Да
/* */ Да Да и нет
" " Нет Нет
' ' Нет Нет
-----------------------------------------------------------------
Вложенные разграничители
-----------------------------------------------------------------
Что означает термин "вложенные"? Проще говоря, при поиске
дирекционного разделителя редактор постоянно ведет счет, через
сколько открывающихся и закрывающихся парных разделителей он про-
шел во время поиска.
- 391,392 -
Это может быть проиллюстрировано на некоторых примерах.
сравненная пара сравненная пара сравненная пара
| | |
--- ------- -------
| | | | | |
arrl[arr2[x]] ( (x > 0) && (y < 0) )
| | | |
--------- ----------------------
| |
сравненная пара сравненная пара
Рисунок 5.25. Поиск и сравнение квадратных
и круглых скобок.
Ведение поиска разграничителей комментариев
-----------------------------------------------------------------
В связи с тем, что разграничитель комментариев состоит из
двух знаков / (слэша, наклонной черты вправо) и * (звездочки), вы
должны быть внимательны при задавании этого сложного разделителя.
Еси вы не выделите подсветкой оба знака, то редактор распознает
только первый знак (слэш (/) в случае, если вы задаете /*, либо
звездочку (*), если вы задаете */). Если вы поместите курсор на
втором знаке в этих разделителях, то редактор не будет знать нап-
равление поиска, а значит и поиска не будет.
Кроме того, как видно из вышеприведенной таблицы, в некото-
рых случаях разделители комментариев бывают вложенными, а в неко-
торых случаях нет. Это не является капризом или невозможностью
решения. Это используется для проверки в различных случаях. Прог-
раммы Си, совместимые с ANSI, не могут содержать вложенные ком-
|