adfun.ru
 
BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Turbo Debugger 3.0 #2-3
Автор ""
Размер 408406 Байт
Страница 29 из 40
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

            По мере отладки программы вы изучите как  специфические  для
       языка конструкции, которые могут приводить к неприятностям, так и
       более общие ошибки программирования, которые вы сделали. Это зна-
       ние можно использовать в последующем,  чтобы постараться избежать
       повторения таких ошибок.  Кроме того,  это послужит хорошей базой
       для того,  чтобы быстрее обнаруживать ошибки в следующих програм-
       мах, которые вы будете писать.

            Здесь важно понимать,  что собой представляет каждая ошибка:
       относится  ли  она к общим ошибкам или вызвана непониманием.  Это
       улучшит ваши возможности по разработке кода без ошибок. Кроме то-
       го,  всегда  лучше писать программу без ошибок,  чем уметь быстро
       потом их исправлять.

                                Общие ошибки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В следующий примерах кратко охватываются различные типы оши-
       бок, которые могут встречаться в ваших программах.


                               Скрытые эффекты
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Иногда вызов функции может приводить к неожиданным результа-
       там:

               char workbuf[20];
               strcpy(workbuf, "all done\n");
               convert("xyz");
               print(workbuf);
               ...
               convert(char *p) {
                       strcpy(workbuf, p);
                       while (*p)
                       ...
               }

            Здесь правильнее было бы использовать в функции  свой  собс-
       твенный рабочий буфер (workbuf).

                    Предположения об инициализации данных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Иногда вы предполагаете,  что другая функция уже  установила

       TDeb 3.0 #2-3               = 125 =

       для вас какие-то значения:

               char *workbuf;
               addworkstring(char *s)
               {
                       strcpy(workbuf, s);
               }

            Надежнее будет записать эту подпрограмму,  добавив оператор:

               if (workbuf == 0) workbuf = (char *)malloc(20);


                           Не забывайте об очистке
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Этот тип ошибки может привести к тому,  что  ваша  программа
       будет  долго  работать,  но  в конце-концов исчерпает динамически
       распределяемую область памяти и аварийно завершит работу:

               crunch_string(char *p)
               {
                       char *word = (char*)malloc(strlen(p));
                       ctrcpy(work,p);
                       ...
                       return(p)
               }

                              "Забор и столбы"
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Этот тип ошибок аналогичен следующему. Сколько столбов пона-
       добиться, чтобы построить 100-метровую изгородь,если столбы нужно
       ставить через каждые 10 метров? Напрашивается ответ 10, но он не-
       верен, так как в расчет принимается последний столб в конце забо-
       ра. Приведем простой пример из программирования на Си:

               for (n = 1; n < 10; n++)
               {
               ...      /* выполняется только 9 раз */
               }


            Здесь ясно  видны  числа 1 и 10,  и вы можете подумать,  что
       цикл будет выполняться от 1 до 10.  Чтобы это действительно  было
       так, нужно вместо < указать <=.


                     Ошибки, специфические для языка Си





ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В "Руководстве пользователя" по Си и С++ есть раздел о не- достатках программирования на Си. Однако лучше всего изучать эту TDeb 3.0 #2-3 = 126 = тему во время отладки. Компиляторы Borland Си и Borland C++ прекрасно подходит для того, чтобы находить многие из специфических для языка Си ошибок, о которых другие компиляторы вам даже не сообщают. "Включив" в компиляторе все предупреждающие сообщения, которые он может гене- рировать, вы сэкономите время, необходимое для отладки программы. (О том, как задавать уровень предупреждений, рассказывается в "Руководстве пользователя по Borland C++".) Далее мы приведем далеко не полный перечень возможных ошибок при использовании языка Си. Для некоторых из них Borland Си и Borland C++ генерирует предупреждающие сообщения. Не забудьте найти причину вывода всех предупреждающих сообщений, поскольку они могут быть вызваны возможной допущенной вами ошибкой. Использование неинициализированных локальных переменных ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В языке Си динамические локальные переменные, описанные внутри функции, будут иметь неопределенное значение, пока вы что- нибудь в них не загрузите. Например: do_ten_times() { int n; while (n < 10) { ... n++; } } Данная функция будет выполнять цикл while неопределенное чис- ло раз, так как перед использованием в качестве счетчика n не инициализируется значением 0. Не следует путать = и == ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В выражениях язык Си позволяет использовать как присваивание (=), так и проверку на равенство (==). Например: if (x = y) { ... } При этом y будет ошибочно загружено в x, а оператор выпол- нится, если значение y не равно 0. Вероятно, вы предполагали на- писать следующее: if (x == y) ... TDeb 3.0 #2-3 = 127 = Не следует путать старшинство операций ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В языке Си так много операций, что иногда легко спутать, ка- кая из них применяется первой, когда выражение содержит несколько операций. Одна из наиболее общих ошибок состоит в неправильном выполнении комбинации операции сдвига и операции сложения или вы- читания. Например: x = 3 << 1 + 1 Если << указывается перед +, то при вычислении этого опера- тора будет получено значение 12, а не 7, как можно было бы ожи- дать. Неверные арифметические действия с указателями ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Когда вы освоитесь с указателями и будет использовать их для работы с массивами, будьте внимательны при сложении и вычитании указателей. Например: int *intp; intp += sizeof(int); не будет работать так, как вы задумали (предполагая увеличить intp для ссылки на следующий элемент массива). Фактически, intp продвигается на два элемента массива. При сложении или при вычи- тании из указателя Си принимает во внимание размер элемента, на который ссылается указатель, поэтому все, что нужно сделать для продвижения указателя на следующий элемент массива - это опера- ция: intp++ Не забывайте о расширении по знаку ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Будьте аккуратны при присваивании целых чисел различного


Страницы : 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


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.