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

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

Печать 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
Все страницы
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
          int (f1);                      Функция, возвращающая целое.           
                                                                                
          typedef int *intptr;                                                  
          intptr p1;                     Указатель на целое.                    
          intptr f2();                   Функция, возвращающая указа-           
                                         тель на целое.                         
                                                                                
          typedef int far *farptr;                                              
          farptr p2;                     Far-указатель на целое.                
          farptr f3();                   Near-функция,  возвращающая            
                                         far-указатель на целое.                
          intptr far f4();               Far-функция,  возвращающая             
                                         near-указатель на целое.               
                                                                                
                                                                                
          typedef int (*fncptr1)(int);                                          
          fncptr1 fp1;                   Указатель  на  функцию, воз-           
                                         вращающую целое и  принимаю-           
                                         щую целое.                             
                                                                                
          typedef int (*fncptr2)(intptr);                                       
          fncptr2 fp2;                   Указатель  на  функцию, воз-           
                                         вращающую  целое и принимаю-           
                                         щую  указатель  на  целое.             
                                                                                
          typedef int (far *ffptr)(far ptr);                                    
          ffptr fp3;                     Far - указатель  на  функцию,          
                                         вовращающую целое и  принима-          
                                         ющую far-указатель на целое.           
                                                                                
          typedef ffptr ffplist[5];                                             
          ffplist list;                  Массив  из  5 far- указателей          
                                         на  функции, возвращающие це-          
                                         лое и принимающие  far-указа-          
                                         ли на целое.                           
                                                                                

                         - 361,362 -
                                                                                
                                                                                
          ffptr gopher(ffplist);         Near-функция,принимающая мас-          
                                         сив  из 5  far-указателей  на          
                                         функции, возвращающие целое и          
                                         принимающие far-указатели  на          
                                         целое, и возвращающая один из          
                                         этих указателей.                       
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
                                                                                
            Таблица 12.4. Объявление указателей при помощи typedef              
                                                                                
          Как видите,  есть  значительная разница в наглядности и чет-          
     кости восприятия между объявлением gopher при  помощи  typedef  и          
     предыдущим способом объявления.  При грамотном использовании опе-          
     раторов типа typedef и прототипов функций вам легче будет состав-          
     лять, отлаживать и сопровождать ваши программы.                            
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                    Использование библиотечных файлов                           
     ----------------------------------------------------------------           
                                                                                
          Турбо Си предлагает версию стандартных библиотечных подпрог-          
     рамм для каждой из шести моделей памяти.  Применяясь для работы в          
     интегрированной среде (TC), Турбо Си достаточно хорошо приспособ-          
     лен для компоновки требуемых библиотек в нужном порядке в зависи-          
     мости от выбранной вами модели.  Кроме того,  будучи применен как          
     автономный  компилятор (TCC),  Турбо Си достаточно хорошо приспо-          
     соблен для автоматической компоновки.                                      
                                                                                
          Однако, если вы используете непосредственно TLINK (компонов-          
     щик Турбо  Си) как автономный редактор связей,  то вам необходимо          
     точно определить, какие библиотеки использовать. Если вы не соби-          
     раетесь  использовать все 6 моделей памяти,  то вам нужно перепи-          
     сать на рабочий или жесткий диск лишь файлы  используемой  модели          
     (моделей).                                                                 
                                                                                
                                                                                
                                                                                
                                                                                

                         - 363,364 -
                                                                                
                                                                                
          Ниже приведен список библиотечных файлов для  каждой  модели          
     памяти.                                                                    
                                                                                
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
          Крохотная              COT.OBJ, MATHS.LIB, CS.LIB                     
          Малая                  COS.OBJ, MATHS.LIB, CS.LIB                     
          Компактная             COС.OBJ, MATHC.LIB, CC.LIB                     
          Средняя                COM.OBJ, MATHM.LIB, CM.LIB                     
                                                    
          #include "myputs.h"                                                   
                                                                                
          main()                                                                
          {                                                                     
            char near *mystr;                                                   
                                                                                
            mystr = "Hello, world\n";                                           
            myputs(mystr);                                                      
          }                                                                     
                                                                                
          Когда  вы компилируете эту программу, Турбо Си читает прото-          
     тип функции из MYPUTS.H и воспринимает его как far-функцию, пред-          

                         - 367,368 -
                                                                                
     полагающую наличие far-указателя. Поэтому он сформирует  надлежа-          
     щую  программу, даже если она скомпилирована с использованием ма-          
     лой модели памяти.                                                         
                                                                                
          Наконец, как же поступать, если вам надо выполнить компонов-          
     ку  с библиотечными подпрограммами? Лучше всего в этом случае ис-          
     пользовать одну из библиотек больших моделей, объявив все ее ком-          
     поненты как far.  Для этого скопируйте каждый заголовочный  файл,          
     который  вы обычно используете (такой как STDIO.H) и переименуйте          
     соответствующим образом копии (например, FSTDIO.H).                        
                                                                                
          После этого  отредактируйте  каждый  скопированный  прототип          
     функции таким образом, чтобы он был однозначно far, например:              
                                                                                
          int far cdecl printf(char far * format, ...);