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

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

Печать 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
Все страницы
     ну 32 бита и задают адрес сегмента и смещение.                             
                                                                                
          Иногда, когда  используется модель данных одного размера,  у          
     вас может возникнуть желание объявить указатель  с  размером  или          
     форматом другим чем у используемого по умолчанию.  Вы можете сде-          
     лать это с помощью модификаторов near, far и huge.                         
                                                                                
                                                                                
          Указатель типа near имеет размер 16 бит; он использует теку-          
     щее содержимое регистра сегмента данных (DS)  для определения ад-          
     реса сегмента.   По  умолчанию  он используется для малых моделей          
     данных. При  использовании указателей типа  near,   данные  вашей          
     программы ограничены размером 64 K текущего сегмента данных.               
                                                                                
          Указатель типа  far  имеет размер 32 бита и содержит как ад-          
     рес, так и смещение. По умолчанию он используется для больших мо-          
     делей. При   использовании указателей типа far допускаются ссылки          
     на данные в пределах адресуемого  пространства  1  Мб  процессора          
     Intel 8088/8086.                                                           
                                                                                
          Указатель типа huge имеет размер 32 бита и аналогично преды-          
     дущему, содержит  адрес сегмента и смещение, однако, в отличии от          
     указателей типа far,  указатель huge всегда поддерживается норма-          
     лизованным. Более детально он рассматривается в главе 12, а здесь          
     дается отличие от указателей типа far:                                     
                                                                                
        # Операторы отношения (==, !=, |                    
          |-----------|---|-----------|--------------|-----|                    
          |     m     | k |не использ.|       j      |  i  |                    
          |___________|___|___________|______________|_____|                    
                                                                                
                                                                                
          Поля целого  типа хранятся в одной из двух форм; самый левый          
     бит - знаковый бит.  Например, поле бит типа signed int шириной 1          
     бит может   хранить  только значение -1 или 0,  и любое ненулевое          
     значение будет интерпретироваться как -1.                                  
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 273,274 -
                                                                                
          Операторы (K&R 9)                                                     
     -----------------------------------------------------------------          
                                                                                
          В Турбо Си реализованы все операторы,  описанные в K&R,  без          
     исключений и модификаций.                                                  
                                                                                
                                                                                
                                                                                
               Определения внешних функций (K&R 10.1)                           
     -----------------------------------------------------------------          
                                                                                
          В Турбо Си описание extern,  заданное внутри функции,  имеет          
     действие в пределах данного блока.  Описание не  будет  распозна-          
     ваться вне блока,  в котором оно определено. Однако, Турбо Си бу-          
     дет запоминать описания, для того чтобы сопоставить их с последу-          
     ющими описаниями тех же самых объектов.                                    
                                                                                
          Турбо Си поддерживает большинство предложенных ANSI расшире-          
     ний к определениям функций K&R,  включая,  в частности,  дополни-          
     тельные модификаторы  функций и прототипы функций.  Турбо Си под-          
     держивает также несколько собственных  расширений  и  определений          
     функций, таких как функции типа interrupt (прерывание).                    
                                                                                
          Модификаторы типа функции (K&R 10.1.1)                                
     -----------------------------------------------------------------          
                                                                                
          В дополнение к external и static,  Турбо Си поддерживает ряд          
     модификаторов, специфицирующих  описания функций:  pascal, cdecl,          
     interrupt, near, far и huge.                                               
                                                                                
                                                                                
                                                                                
          Модификатор функции pascal                                            
          --------------------------                                            
                                                                                
          Модификатор pascal,  используемый в Турбо Си,   предназначен          
     для функций (и указателей на функции),  которые используют приня-          
     тую в Паскале последовательность передачи параметров.  Это позво-          
     ляет писать на языке Си функции, которые могут быть вызванными из          
     программ, написанных  на других языках; а также обращаться из ва-          
     ших Си программ к внешним программам, написанным на языках отлич-          
     ных от Си.  Имя функции преобразуется к верхнему  регистру,   для          
     правильной работы компоновщика.                                            
                                                                                
          Примечание: использование   опции  компилятора  -p  (Calling          

                         - 275,276 -
                                                                                
     convention...Pascal) будет  вызывать обращение со всеми функциями          
     (и указателями на эти функции)  как если бы они были типа pascal.          
     Кроме того, функции, объявленные типа pascal, могут вызываться из          
     Си программ, также как и Си программа может быть вызвана из функ-          
     ции, имеющей  тип pascal. Например, если вы объявили и откомпили-          
     ровали следующую функцию:                                                  
                                                                                
          pascal putnums(unt i, int j, int k)                                   
          {                                                                     
             printf("And the answers are: %d, %d и %d\n",i,j,k);                
          }                                                                     
                                                                                
     другая Си программа может затем компоноваться с ней  и обращаться          
     к ней, используя описание:                                                 
                                                                                
          pascal putnums(int i, int j, int k);                                  
                                                                                
          main()                                                                
          {                                                                     
             putnums(1,4,9);                                                    
          }                                                                     
                                                                                
                                                                                
          Функции типа pascal не могут  иметь различное число аргумен-