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

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

Печать 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
Все страницы
          В классическом  Си  определенные  пользователем  типы данных          
     именуются редко,  за исключением структур и объединений  -  перед          
     любым объявлением   которых  вы ставите ключевые слова struct или          
     union.                                                                     
                                                                                

                         - 543,544 -
                                                                                
          В современом Си обеспечивается другой уровень информационной          
     содержательности путем использования директивы typedef.  Она поз-          
     воляет связать нужный тип данных (включая struct и enum)  с неко-          
     торым именем, а затем объявить переменые этого типа. Далее предс-          
     тавлен пример определения типа  и  определение  переменных  этого          
     нового, введенного пользователем, типа данных:                             
                                                                                
                  typedef int *intptr;                                          
                  typedef char namestr[30];                                     
                  typedef enum ( male, female, unknown) sex;                    
                  typedef struct (                                              
                      namestr  last, first;                                     
                      char     ssn[9];                                          
                      sex      gender;                                          
                      short    age;                                             
                      float    gpa;                                             
                  ) student;                                                    
                  typedef student class[100];                                   
                                                                                
                  class   hist104,ps102;                                        
                  student valedictorian;                                        
                  intptr  iptr;                                                 
                                                                                
                                                                                
          Использование typedef делает программу более читабельной,  а          
     также позволяет вам не ограничиваться  одним  участком  программы          
     для определения типов данных,  а распространить их определение на          
     всю программу по мере их появления и использования в ней.                  
                                                                                
                                                                                
                                                                                
          Описание функции void                                                 
     ----------------------------------------------------------------           
                                                                                
          В начальной версии языка Си каждая функция возвращала значе-          
     ние некоторого типа;  если же тип не был описан,  то по умолчанию          
     функции присваивался тип int. Подобно этому функция, возвращающая          
     "сгенерированные"  (нетипичные) указатели, обычно описывалась как          
     возвращающая указатель   типа char, только потому, что она должна          
     была хоть что-то возвращать.                                               
                                                                                
          В нашей же версии Си существует стандартный тип void,  кото-          
     рый представляется как разновидность "нулевого" типа. Любая функ-          
     ция, не  возвращающая явно какое-либо значение, может быть объяв-          
     лена как функция типа void.  Заметим,  что большинство  программ,          

                         - 545,546 -
                                                                                
     использующих динамическое распределение памяти (например malloc),          
     описываются как имеющие тип void. Это означает, что они возвраща-          
     ют нетипизированный указатель, значение которого вы затем (в Тур-          
     бо Си)  можете присвоить указателю любого типа данных без предва-          
     рительного преобразования  типов (хотя преобразования типов лучше          
     использовать повсеместно, для сохранения совместимости).                   
                                                                                
                                                                                
                                                                                
          Используемые расширения                                               
     ----------------------------------------------------------------           
                                                                                
          Существует несколько дополнительных расширений языка Си, ко-          
     торые делают   программу более читаемой.  Эти расширения заменяют          
     некоторые анахронизмы ранних версий Си и позволяют вам писать бо-          
     лее эффективные, красивые и мобильные программы, а также повысить          
     производительность вашего труда.                                           
                                                                                
          Здесь мы представляем их краткий список.                              
                                                                                
                                                                                
                                                                                
                                                                                
          Строковые литералы                                                    
     -----------------------------------------------------------------          
                                                                                
          В классическом Си для получения длинной строковой переменной          
     в программе вы используете символы продолжения или некоторые раз-          
     новидности конкатенации.  В современном Си вы можете просто  раз-          
     бить большую  строковую переменную на несколько строк таким обра-          
     зом:                                                                       
                                                                                
                main()                                                          
                {                                                               
                  char *msg;                                                    
                                                                                
                 msg="Не так давно те, кто стал уже Си-хаккерами,"              
                     "были вынуждены пускаться на различные ухищрения"          
                     "для того, чтобы записать длинную стоку в"                 
                     "одну переменную. Но вам даже не нужно шевелить"           
                     "мозгами, чтобы засунуть в переменную целое"               

                     "стихотворение."                                           
                                                                                
                  printf("%s",msg);                                             
                }                                                               

                         - 547,548 -
                                                                                
               Шестнадцатиричная символьная константа                           
     -----------------------------------------------------------------          
                                                                                
          В классическом Си ключевые последовательности,  определяющие          
     конкретные символы в коде ASCII, представлены в восьмиричной сис-          
     теме счисления.  Это обусловлено тем, что в начале развития машин          
     двоичные числа обычно представлялись в восьмиричной форме.                 
                                                                                
          В настоящее  время  большинство компьютеров используют шест-          
     надцатиричную форму для представления  двоичных  чисел.   Поэтому          
     современный Си   позволяет объявлять символьные константы в шест-          
     надцатиричной системе счисления. Основная форма шестнадцатиричной          
     константы имеет вид:                                                       
                                                                                
                                '\xDD'                                          
                                                                                
     где  DD  представляет  одну  или две шестнадцатиричные  цифры (из          
     набора 0..9,A..F).                                                         
                                                                                
          Эта ключевая последовательность может быть  прямо  присвоена          
     переменной типа char или может быть вложена в строку:                      
                                                                                
                                                                                
                             ch = '\x20'.                                       
                                                                                
                                                                                
                                                                                
          Типы со знаком.                                                       
     -----------------------------------------------------------------          
                                                                                
          Классический Си подразумевает, что все int-типы являются ти-          
     пами со знаком, и потому включает модификатор типа unsigned чтобы          
     специфицировать обратное.  По умолчанию переменные типа char счи-          
     таются signed (со знаком),  что подразумевает изменение их значе-          
     ний от -128 до 127.                                                        
                                                                                
          Однако, в настоящее время большинство компиляторов Си,  реа-          
     лизованных для современных моделей компьютеров,  воспринимают тип          
     данных char как unsigned.  В связи с этим,  для повышения мобиль-          
     ности программ на Турбо Си,  в компилятор пакета включена  опция,          
     позволяющая компилировать тип данных char как unsigned по умолча-          
     нию. В  противном случае вы можете объявить  символьную  знаковую          
     переменную как signed char.                                                
                                                                                
                                                                                

                         - 549,550 -
                                                                                
               Ловушки в программировании на Си                                 
     -----------------------------------------------------------------          
                                                                                
          Существует несколько  общих ошибок,  допускаемых начинающими          
     программистами при программировании на  Си.   Далее  предлагаются          
     несколько из них вместе с предложениями, как их избежать.                  
                                                                                
                                                                                
                                                                                
          Маршрут MS DOS в строке Си                                            
     -----------------------------------------------------------------          
                                                                                
          Все знают, что обратный слеш (\) в MS DOS означает, что сле-          
     дующая далее строка есть имя каталога (справочника),  однако в Си          
     слеш является ключевым символом в строке.  Это противоречие явля-          
     ется одной из проблем,  в тех случаях,  когда вам необходимо ука-          
     зать маршрут доступа к файлу в строке Си. Например, вы набираете:          
                                                                                
                          "c:\new\tools.c"                                      
                                                                                
          При этом  вы ожидаете,  что задается файл tools.c в каталоге          
     new на драйвере с.  Это, однако, не совсем так. Вместо желаемого,          
                                                                                
     комбинация \n, являющаяся подстрокой строки Си, указывающей марш-          
     рут доступа к файлу,  представляет собой ключевую  последователь-          
     ность для перехода на новую строку (LF или символ перехода на но-          
     вую строку),  а \t есть  ни  что  иное  как  изображение  символа          
     табуляции в Си-программе.  Таким образом возникла ситуация, когда          
     в имя файла были встроены символы новой строки и табуляции. В ре-          
     зультате, DOS    воспримет эту строку как неправильное имя файла,          
     так как имя файла не должно включать символов табуляции или новой          
     строки. Если  же необходимость использования в имени файла комби-          
     наций символов, воспринимаемых как управляющие, велика, применяй-          
     те их  экранирование путем удвоения обратного слеша для каждой из          
     встречающихся комбинаций управляющих символов.                             
                                                                                
          Правильная   строка   (с   учетом  экранирования управляющих          
     последовательностей) будет иметь вид:                                      
                                                                                
                             "c:\\new\\tools.c"                                 
                                                                                
                                                                                
                                                                                
          Неправильное употребление указателей                                  
     ----------------------------------------------------------------           

                         - 551,552 -