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

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

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 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
Все страницы
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Глобальные описания.                                             
     -----------------------------------------------------------------          
                                                                                
          Константы, типы данных и переменные,  описанные вне  функций          
     (включая main),  считаются  глобальными ниже точки описания.  Это          
     позволяет использовать их внутри функций в пределах всей програм-          
     мы вследствие того,  что они уже описаны и известны во всех функ-          
     циях ниже точки описания. Если вы переместите описание INFINITY в          
     конец программы, то компилятор выдаст сообщение о том, что им об-          
     наружены  две  ошибки:  одна  из  них - в get_ratio, a другая - в          
     put_ratio. Причина  ошибок - использование неописанного идентифи-          
     катора.                                                                    
                                                                                
                                                                                
                                                                                
               Описание функций                                                 
     -----------------------------------------------------------------          
                                                                                
          Вы можете  использовать два различных стиля описания функций          
     как классический стиль,  так и современный.  Классический  стиль,          
     который  нашел  широкое  применение в большинстве программ на Си,          
     имеет следующий формат:                                                    

                         - 469,470 -
                                                                                
                                                                                
          тип имя_функции() ;                                                   
                                                                                
          Эта спецификация описывает имя функции ("имя_функции") и тип          
     возвращаемых ею значений ("тип").  Это описание не содержит ника-          
     кой информации о параметрах функции,  однако это не вызовет обна-          
     ружения  ошибки компилятором или преобразования типов к типу, уже          
     принятому контекстно,  в соответствии с принятыми соглашениями  о          
     преобразовании  типов.  Если  вы  перепишите  описания  функций в          
     RATIO.C,  используя этот стиль, то вновь полученные описания при-          
     обретут вид:                                                               
                                                                                
           void   get_parms();                                                  
           float  get_ratio();                                                  
           void   put_ratio();                                                  
                                                                                
          Современный стиль  используется  в  конструкциях расширенной          
     версии Си,  предложенной ANSI. При описании функций в этой версии          
     Си используются специальные средства языка,  известные под назва-          
     нием "прототип функции".  Описание функции  с  использованием  ее          
     прототипа содержит дополнительно информацию о ее параметрах:               
                                                                                
                                                                                
           тип имя_функции(пар_инф1,пар_инф2,...)                               
                                                                                
     где параметр пар_инф1 имеет один из следующих форматов:                    
                                                                                
           тип                                                                  
           тип имя_пар                                                          
           ...                                                                  
                                                                                
          Другими словами,  для использования прототипа функции должен          
     быть описан тип каждого формального параметра,  либо указано  его          
     имя.  Если  функция  использует переменный список параметров,  то          
     после указания последнего параметра функции в описании необходимо          
     использовать эллипсис (...).                                               
                                                                                
          Подход к  описанию  функций  с помощью описания ее прототипа          
     дает возможность компилятору производить проверку на соответствие          
     количества  и типа параметров при каждом обращении к функции. Это          
     также позволяет компилятору выполнять по  возможности необходимые          
     преобразования. Обратите внимание, что описание функций в началь-          
     ной версии RATIO.C осуществлено с помощью прототипов функций. Бо-          
     лее  полную информацию о прототипах функций можно получить в гла-          
     вах 11 и 12.                                                               

                         - 471,472 -
                                                                                
               Определение функций                                              
     -----------------------------------------------------------------          
                                                                                
          Так же,  как  и в описании функций,  при определении функций          
     прослеживается два стиля - классический и современный.                     
                                                                                
          Классический формат определения функций имеет примерно  сле-          
     дующий вид:                                                                
                                                                                
          тип имя_функции(имена_параметров)                                     
          описание параметров;                                                  
          {                                                                     
             локальные описания;                                                
             операторы;                                                         
          }                                                                     
                                                                                
          Формат описания в современном стиле предусматривает  опреде-          

     ление параметров функции в скобках, следующих за "имя_функции":            
                                                                                
          тип имя_функции(пар_инф, пар_инф, ...)                                
                                                                                
          Однако, в  этом  примере определение параметра "пар_инф" со-          
                                                                                
     держит всю информацию о передаваемом параметре: тип и идентифика-          
     тор.  Это позволяет рассматривать первую строку определения функ-          
     ции как часть соответствующего прототипа функции за  одним важным          
     исключением:  эта  строка определения функции не содержит точку с          
     запятой (;) в определении,  тогда как прототип функции всегда за-          
     канчивается  точкой  с  запятой.  Например,  определение  функции          
     get_parms в классическом стиле выглядит следующим образом:                 
                                                                                
          void get_parms(p1, p2)                                                
          float *p1; float *p2;                                                 
          { ... }                                                               
                                                                                
          Но приверженец  современного  стиля  программирования  на Си          
     опишет эту же функцию иначе, с использованием прототипа:                   
                                                                                
          void get_parms(float *p1, float *p2)                                  
          { ... }                                                               
                                                                                
          Заметьте, что ряд описаний (константы, типы данных, перемен-          
     ные),  содержащихся внутри функции (исключение составляет главная          
     функция main),  "видимы" или определены только внутри этой  функ-          
     ции.  Поэтому Си не поддерживает вложенность функций;  т.е. вы не          

                         - 473,474 -
                                                                                
                                                                                
     можете объявить одну функцию внутри другой.                                
                                                                                
          Функции могут быть размещены в программе в различном порядке          
     и  считаются  глобальными для всей программы,  включая встроенные          
     функции,  описанные до их использования. Старайтесь корректно ис-          
     пользовать функции,  которые еще вами не определены и не описаны;          
     когда компилятор обнаружит функцию,  которую прежде он не  встре-          
     чал,  он  определит тип значений,  возвращаемый функцией как int.          
     Если вы ранее определили тип возвращаемых ею значений как, напри-          
     мер, char*, то компилятор выдаст ошибку несоответствия типов дан-          
     ных.                                                                       
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Комментарии                                                      
     -----------------------------------------------------------------          
                                                                                
          Итак, вы хотите внести в программу некоторые пояснения,  ко-          
     торые напомнили бы вам (или информировали  кого-нибудь  другого),          
     что означает та или иная переменная, что дает та или иная функция          
     или оператор и т.д.  Эти пояснения носят  название  "комментарий"          
     (comments). Си так же, как и большинство других языков программи-          
     рования, позволяет вносить комментарии в программы.                        
                                                                                
          Начало комментария обозначается комбинацией  знаков  слеш  и          
     звездочка (/*). После того, как компилятор обнаружит эту комбина-          
     цию знаков,  он игнорирует участок программы вплоть до последова-          
     тельности знаков */.                                                       
                                                                                
          Комментарий может занимать несколько строк программы:                 
                                                                                
          /* Это очень длинный комментарий,                                     
           занимающий более одной строки программы */                           
                                                                                
          Проанализируйте еще раз расширенную версию RATIO.C и добавь-          
     те в нее комментарии.                                                      

                         - 475,476 -
                                                                                
                                                                                
     Резюме                                                                     
     -----------------------------------------------------------------          
                                                                                
          Мы изучили семь основных конструкций  языка программирования          
     и  показали,  как можно использовать каждую из них в рамках Турбо          
     Си.                                                                        
                                                                                
          На этом изучение основных конструкций Си  не  заканчивается,          
     мы вернемся к ним в главе 7, где рассмотрим их более подробно.             
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                              Г Л А В А  7