КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА - Турбо С: руководство пользователя. Часть 1 - Стр. 18

Индекс материала
Турбо С: руководство пользователя. Часть 1
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Стр. 57
Стр. 58
Стр. 59
Стр. 60
Стр. 61
Стр. 62
Стр. 63
Стр. 64
Стр. 65
Стр. 66
Стр. 67
Стр. 68
Стр. 69
Все страницы
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 143,144 -
                                                                                
               Использование Ctrl-Break                                         
     -----------------------------------------------------------------          
                                                                                
          Помимо всех  заданных вами точек останова вы можете восполь-          
     зоваться во время выполнения программы "моментальной" точкой  ос-          
     танова, нажав Ctrl-Break. Используя это средство, вы можете оста-          
     навливать программу в любой момент времени.  Когда  вы  нажимаете          
     Ctrl-Break,  вы  выходите из программы и возвращаетесь в редактор          
     Турбо Си,  причем маркер выполнения находится на строке,  которая          
     должна  быть  выполнена в следующий раз,  а сама программа готова          
     продолжить свою работу.                                                    
                                                                                
          Объясним, как в действительности происходит останов програм-          
     мы при нажатии Ctrl-Break.                                                 
                                                                                
          В процессе своей работы отладчик взаимодействует с DOS, BIOS          
     и другими частями операционной системы; поэтому ему известно, что          
     работает в данный момент времени (подпрограмма DOS,  функция BIOS          
     или же именно фрагмент вашей программы).  После того, как вы наж-          
     мете Ctrl-Break,  отладчик дождется,  чтобы заработала непосредс-          
     твенно ваша программа. Затем, на уровне инструкций микропроцессо-          
     ра,   он   сделает   несколько   шагов,   чтобы  дойти  до  кода,          
                                                                                
                                                                                
     соответствующему началу исходной строки на  Си.  И  только  после          
     всего  этого он остановится и переведет маркер выполнения на дан-          
     ную строку.                                                                
                                                                                
          Если же вы повторно нажмете Ctrl-Break прежде,  чем отладчик          
     найдет и укажет строку программы, то он немедленно прервет работу          
     программы и не будет пытаться найти строку  исходного  текста.  В          
     этом случае,  программа останавливается без завершения своего вы-          
     вода и вызова какой-либо функции выхода. (Что аналогично заверше-          
     нию работы программы, выполняемому с помощью функции _exit). Поэ-          
     тому,  дважды нажимать Ctrl-Break вам следует лишь  тогда,  когда          
     программа "зациклилась" и одно нажатие ее не останавливает.                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 145,146 -
                                                                                
               Пошаговое выполнение "через функции"                             
     -----------------------------------------------------------------          
                                                                                
          Теперь, когда вы достигли той части WORDCNT, в которой могут          
     быть ошибки,  необходимо быть очень внимательным. Данный фрагмент          
     main будет обрабатывать по одной строке, сравнивая получаемые ре-          
     зультаты с желаемым эффектом.                                              
                                                                                
          Для того, чтобы выполнить одну строку main выберите Run/Step          
     Over.  Отладчик отработал оператор while и считает первую  строку          
     входного файла.  Затем он переместит маркер выполнения на следую-          
     щую строку, содержащую исполняемые операторы. Повторно воспользо-          
     вавшись   Run/Step   Over   можно  выполнить  следующий  оператор          
     (printf).                                                                  
                                                                                
          Привело ли к желаемому эффекту выполнение  оператора  while?          
     Для того,  чтобы определить это,  выберите вариант User Screen из          
     меню Run, или нажмите Alt-F5. В результате этой команды вы увиде-          
     те экран выполнения.  Т.к.  на этом экране видна первая считанная          
     из файла строка,  вы можете сделать вывод,  что и while и  printf          
     работают  правильно.  Для  возврата в окно редактирования нажмите          
     любую клавишу.                                                             
                                                                                
                                                                                
                                                                                
          "Горячей" клавишей для команды Run/Step  Over  является  F8.          
     Поэтому, для выполнения очередного оператора нажмите F8, что при-          
     ведет к вычислению длины введенной строки, значение которой прис-          
     воится переменной i.                                                       
                                                                                
          Внимание! "трассирование  в"  или  "шаг  через" библиотечную          
     функцию longjmp не приведет к остановке на следующей строке прог-          
     раммы (т.к. эта функция никогда не возвращается). По этой причине          
     ваша программа (в этом случае)  будет  выполняться  до  следующей          
     точки останова или до самого конца.                                        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                                                                                
                                                                                
                                                                                
                                                                                

                         - 147,148 -
                                                                                
               Вычисление выражений                                             
     -----------------------------------------------------------------          
                                                                                
          Приводит ли выполнение оператора  присваивания  к  желаемому          
     результату?  Узнать это можно оценив значение переменной i. Выбе-          
     рите Debug/Evaluate.  Отладчик откроет окно содержащее три  поля.          
     Мы будем называть эти поля в соответствии с присвоенными им функ-          
     циями:                                                                     
                                                                                
          1. Поле Evaluate (вычислений): сюда вы вводите те выражения,          
     которые вы хотите вычислить и,  возможно,  изменить.  (Замечание:          
     Если длина вашего выражения превышает размер поля  вычислений, то          
     для  его просмотра вы можете воспользоваться клавишами управления          
     курсором).                                                                 
                                                                                
          2. Поле RESULT (результата):  в это  поле  отладчик  выводит          
     вычисленное значение.                                                      
                                                                                
          3. Поле  NEW VALUE (нового значения):  в этом поле вы можете          
     присвоить своему выражению новое значение (при необходимости).             
                                                                                
          Отметим, что в поле вычислений инидицируется слово. Это сло-          
                                                                                
     во, перенесенное  в данное поле из текущей позиции курсора в окне          
     редактирования, является значением поля вычислений,  принятым  по          
     умолчанию. Мы  сразу же можем воспользоваться им.  Однако в нашем          
     случае, введите выражение i и нажмите Ввод. В поле результата от-          
     ладчик поместит значение переменной i. Оно равно 43, что является          
     правильным. Для выхода из системы меню нажмите F10.                        
                                                                                
          Следующая группа операторов программы проверяет,  заканчива-          
     ется ли  символом новой строки строка,  считанная функцией fgets.          
     Если нет,  то можно сделать вывод,  что считанная строка является          
     слишком длинной для имеющегося буфера,  и, поэтому, программа вы-          
     ведет соответствующее предупреждение. В противном же случае - все          
     в порядке. Программа удалит из строки найденный символ окончания,          
     для того, чтобы он не был включен в размер последнего слова.               
                                                                                
          Перед выполнением оператора if было бы очень полезно  взгля-          
     нуть на введенную строку,  для того чтобы узнать, что нужно ждать          
     от выполнения этого оператора.  Установите курсор в окне редакти-          
     рования   над  словом  linebfr  и  снова  выберите  элемент  меню          
     Debug/Evaluate (или же "горячую" клавишу Ctrl-F4). Отладчик выве-          
     дет в появившееся окно (в поле вычислений) слово "linebfr".  Наж-          
     мите Ввод.                                                                 

                         - 149,150 -
                                                                                
                                                                                
                                                                                
          Отладчик выведет:                                                     
                                                                                
          To be or not to be: that is the question.\n                           
                                                                                
          Точно также,  как и в исходных текстах Си-программы, обозна-          
     чение "\n" соответствует символу конца строки.                             
                                                                                
          Теперь, нажав F8,  обработайте оператор if.  В случае,  если          
     этот оператор сработает правильно,  маркер выполнения должен  пе-          
     редвинуться на предложение "else".  Выполните оператор присваива-          
     ния (под else),  а затем вновь просмотрите linebfr. (Для этого вы          
     можете использовать  Ctrl-F4  или  элемент  меню Debug/Evaluate).          
     Символ новой строки (\n) должен быть удален.  Ну  и  слава  богу,          
     пойдем дальше.                                                             
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Функции nextword и wordlen                                       
     -----------------------------------------------------------------          
                                                                                
          Следующий оператор вызывает функцию  nextword.  Эта  функция          
     определяет положение очередного (в данном случае - первого) слова          
     в строке.  Обработайте этот оператор,  используя F8, а затем пос-          
     мотрите wordptr  для того,  чтобы узнать что же вернула nextword.          
     Вы можете убедиться, что wordptr указывает на T в строке To be or          
     not to be:  that is the question. Если это так, то nextword рабо-          
     тает правильно, по крайней мере в этом простом случае.                     
                                                                                
          Следующим фрагментом программы является цикл  while.  Каждая          
     итерация  этого  цикла должна обрабатывать одно слово из linebfr,          
     знаращивая при этом wordptr так,  чтобы он указывал на новое сло-          
     во. После  того,  как таким образом в этом цикле будет обработано          
     последнее слово, wordptr должен указывать на ограничивающий стро-          
     ку null символ, а сам цикл должен завершиться.                             
                                                                                
          Выполните  оператор while. Маркер выполнения переместится на          
     первый оператор в теле цикла,  который вызывает функцию  wordlen.          
     Эта функция определяет длину слова, на которое указывает wordptr.          
     Выполните оператор и оцените значение переменной  i.  Значение  i          

                         - 151,152 -