Турбо С: руководство пользователя. Часть 2

Турбо С: руководство пользователя. Часть 2 - Стр. 21

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 2
Стр. 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
Все страницы
     файла (имя которого вводится в командной строке) на экран.                 
                                                                                
               Турбо Паскаль                 Турбо Си                           
     ----------------------------------------------------------------           
                                                                                
     program DumpIt;                       # include
                                                                                
          void swap (float *x, float *y);                                       
                                                                                
          Теперь, если вы прокомпилируете  вашу программу с оператором          
     swap(q,r),  вы получите ошибку, сообщающую, что вы имеете несоот-          
                                                                                
     ветствие типов при вызове swap.                                            
                                                                                
                                                                                
                                                                                
               Ошибка #3: пропуск скобок при вызове функции.                    
     -----------------------------------------------------------------          
                                                                                
          В Паскале,  процедура,  не имеющая  параметров,   вызывается          
     просто по имени:                                                           
                                                                                
          AnyProcedure;                                                         
          i := AnyFunction;                                                     
                                                                                
          В Си,  название функции,  если даже нет параметров,   должно          
     всегда содержать открытые и закрытые скобки. Легко ошибиться так:          
                                                                                
          AnyFunction;                   /*Нет никакого действия*/              
          i = AnyFunction;    /*Присвоение i адреса AnyFunction */              
                                                                                
          когда вы действительно хотели:                                        
                                                                                
          AnyFunction();                   /*Вызвать AnyFunction*/              

                         - 173,174 -
                                                                                
          i = AnyFunction();  /*Вызвать AnyFunction, присвоить                  
                                                    результат i */              
                                                                                
                                                                                
                                                                                
               Ошибка #4: предупреждающие сообщения.                            
     -----------------------------------------------------------------          
                                                                                
          В добавление к основным ошибочным сообщениям, Турбо Си также          
     выдает предостережения  о не фатальных ошибках.  Используя некор-          
     ректную функцию вызова из предшествующего примера, Турбо Си может          
     выдать следующие предостережения:                                          
                                                                                
          Warning test.c 5: Code has no effect in function main                 
                            (код не исполняется в основной функции)             
          Warning test.c 6: Non-portable pointer assigment in                   
                                                   function main                
                    (в основной функции присваивается не мобильный              
                                                   указатель)                   
                                                                                
          Оба оператора действительно  законны,  и  так  как ошибки не          
     имели место, может быть создан файл .OBJ. Остерегайтесь! Эти типы          
                                                                                
     предупреждений будут всегда при фатальных  ошибках. Не относитесь          
     к предостережениям легкомысленно.                                          
                                                                                
                                                                                
                                                                                
               Ошибка #5: индексация в многомерных массивах.                    
     -----------------------------------------------------------------          
                                                                                
          Предположим, вы имеете двумерный массив, названный matrix, и          
     хотите сослаться на ячейку памяти (i,j).  Как программист на Пас-          
     кале, вы склоны записать это следующим образом:                            
                                                                                
          x = matrix [i,j];                                                     
                                                                                
          Это вполне возможно, однако не делайте так.                           
                                                                                
          В Си  это  означает серию выражений,  отделенных запятыми; в          
     этом случае,  полное выражение берет величину из последнего выра-          
     жения, так предшествующий оператор является эквивалентом                   
                                                                                
          x = matrix[j];                                                        
                                                                                

                         - 175,176 -
                                                                                
                                                                                
          Это не то,  что вы хотели, но это законченный оператор в Си.          
     Все, что вы получите, это предостережение, так как Си думает, что          
     вы пробуете присвоить x адрес matrix [j], то есть j-той строки. В          
     Си вы должны явно индексировать каждый массив. Так вам надо напи-          
     сать                                                                       
                                                                                
          x = matrix[i] [j];                                                    
                                                                                
          Памятка. Для  многомерного массива каждый индекс заключается          
     в отдельные скобки.                                                        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Ошибка #6: Забывание о различиях между символьными