14 (1108013)

Файл №1108013 14 (Электронный курс лекций (2015))14 (1108013)2019-04-24СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Курс «Алгоритмы и алгоритмические языки»1 семестр 2015/2016Лекция 141Схема компиляцииИсходная программаfile1.cfile3.cfile2.c1Препроцессор1Препроцессор1Препроцессор2Компилятор2Компилятор2Компиляторfile1.s3Ассемблерfile3.sfile2.s3file1.oАссемблерfile2.o43Ассемблерfile3.oКомпоновщикИсполняемый файл2ПрепроцессорПеред компиляцией выполняется этап препроцессирования.Это обработка программного модуля для получения егоокончательного текста, который отдается компилятору.Управление препроцессированием выполняется с помощьюдиректив препроцессора:#include <...> - системные библиотеки#include "..." – пользовательские файлы#define name(parameters) text#undef name#define MAX 128#define ABS(x) ((x) >= 0 ? (x) : -(x))x -> y – 7ABS(x) -> ((y – 7) >= 0 ? (y – 7) : -(y – 7))x -> a-- ?3Препроцессор и условная компиляцияПрепроцессор позволяет организовать условное включениефрагментов кода в программу#ifdef name / #endif – проверка определения имени#ifndef _STDIO_H#define _STDIO_H<...

текст файла ...>#endif4Препроцессор и условная компиляцияПрепроцессор позволяет организовать условное включениефрагментов кода в программу#if/#if defined/#elif/#else/#endif – общие проверкиусловий#if HOST_BITS_PER_INT >= 32typedef unsigned int gfc_char_t;#elif HOST_BITS_PER_LONG >= 32typedef unsigned long gfc_char_t;#elif defined(HAVE_LONG_LONG)&& (HOST_BITS_PER_LONGLONG >= 32)typedef unsigned long long gfc_char_t;#else#error "Cannot find an integer type with at least 32 bits"#endif5Препроцессор: операции # и ##Операция # позволяет получить строковое представлениеаргумента#define FAIL(op)do {fprintf (stderr, "Operation " #op "failed: ""at file %s, line %d\n", __FILE__,__LINE__);abort ();} while (0)\\\\\\int foo (int x, int y) {if (y == 0)FAIL (division);return x / y;}do { fprintf (stderr, "Operation " "division" "failed: " "at file%s, line %d\n", "fail.c", 13); abort (); } while (0);6Препроцессор: операции # и ##Операция ## позволяет объединить фактические аргументымакроса в одну строкуjava-opcodes.h:enum java_opcode {#define JAVAOP(NAME, CODE, KIND, TYPE, VALUE) \OPCODE_##NAME = CODE,#include "javaop.def"#undef JAVAOPLAST_AND_UNUSED_JAVA_OPCODE};javaop.def:JAVAOP (nop,0, STACK,POP,0)JAVAOP (aconst_null,1, PUSHC,PTR,0)JAVAOP (iconst_m1,2, PUSHC,INT,-1)<...>JAVAOP (ret_w,209, RET,RETURN, VAR_INDEX_2)JAVAOP (impdep1,254, IMPL,ANY,1)JAVAOP (impdep2,255, IMPL,ANY,2)7Препроцессор: операции # и ##Операция ## позволяет объединить фактические аргументымакроса в одну строкуgcc –E java-opcodes.h:enum java_opcode {OPCODE_nop = 0,OPCODE_aconst_null = 1,OPCODE_iconst_m1 = 2,OPCODE_iconst_0 = 3,<...>OPCODE_impdep2 = 255,LAST_AND_UNUSED_JAVA_OPCODE};8Компоновка и классы памятиКласс памяти Время жизниВидимость Компоновка ОпределенаaвтоматическийавтоматическоеблокнетВ блокерегистровыйавтоматическоеблокнетВ блоке какregisterстатическийстатическоефайлвнешняяВне функцийстатическийстатическоефайлвнутренняяВне функцийкак staticстатическийстатическоеблокнетВ блоке как staticКвалификатор extern: переменная определена и память под неевыделена в другом файлеКлассы памяти функций:статическая (объявлена с квалифатором static)внешняя (extern), по умолчаниювстраиваемая (inline, C99)Объявление внешних функций в заголовочных файлах:extern void *realloc (void *ptr, size_t size);9КомпоновщикОрганизовывает слияние нескольких объектныхфайлов в одну программуРазрешает неизвестные символы (внешниепеременные и функции)Глобальные переменные с одним именемполучают одну область памятиОшибки, если необходимых имен нетили есть несколько объектов с одним именемОпции для указания места поискаХорошим стилем программирования являетсяэкспорт лишь тех объектов, которые используютсяв других файлах (интерфейс модуля)Используйте квалификатор staticСборка исполняемого файла или библиотеки10(статической или динамической)Отладка программВсе программы содержат ошибки, отладка – это процесс поискаи удаления некоторых ошибокСуществуют другие методы обнаружения ошибок (тестирование,верификация, статические и динамические анализаторы кода),но их применение не гарантирует отсутствия ошибокДля отладки используют инструменты, позволяющие получитьинформацию о поведении программы на некоторых входныхданных, не изменяя ее поведенияПростейший метод: отладочная печатьstatic void debug_array (int *a, int n) {int *a; int n;fprintf (stderr, "Array (%d)", n);n = read_array (a);for (int i = 0; i < n; i++)debug_array (a, n);fprintf (stderr, "%d ", a[i]);fprintf (stderr, "\n");}Отладочная печать может контролироваться макросом (NDEBUG)11Отладка программ: отладчикиОтладчик – основной инструмент отладки программыОтладчик позволяетзапустить программу для заданных входных данныхостанавливать выполнение по достижении заданныхточек программы безусловно или при выполнениинекоторого условия на значения переменныхостанавливать выполнение, когда некоторая переменнаяизменяет свое значениевыполнить текущую строку исходного кода программыи снова остановить выполнениепосмотреть/изменить значения переменных, памятипосмотреть текущий стек вызововНеобходимое условие для отладки на уровне исходного кода:наличие в исполняемом файле программы отладочнойинформации (связи между командами процессора и строкамиисходного кода программы, связь между адресами и12переменными и т.д.)Отладка программ: отладчик gdbКомпиляция с отладочной информацией: gcc -gНекоторые команды gdbgdb <file> --args <args> – загрузить программу сзаданными параметрами командной строкиrun/continue – запустить/продолжить выполнениеbreak <function name/file:line number> –завести безусловную точку остановаcond <bp#> condition – задать условие остановкивыполнения для некоторой точки остановаwatch <variable/address> – задать точкунаблюдения (остановка выполнения при изменениизначения переменной или памяти по адресу)next/step – выполнить текущую строку исходного кодапрограммы без захода/с заходом в вызываемые функцииprint <var>/set <var> = expression – посмотреть/изменить текущие значения переменных, памятиbt – посмотреть текущий стек вызововСреда Code::Blocks поддерживает gdb в своем интерфейсе 13Отладка программ: примеры команд gdbУстановка точек остановаможно использовать '.' вместо '->'b fancy_abortb 7199b sel-sched.c:7199cond 2 insn.u.fld.rt_int == 112cond 3 x_rtl->emit.x_cur_insn_uid == 1396Просмотр и изменение значений переменныхp orig_ops.u.expr.history_of_changes.basep bb->indexset sched_verbose=5call debug_vinsn (0x4744540)Установка точек наблюденияwa can_issue_morewa ((basic_block) 0x7ffff58b5680)->preds.base.prefix.num14.

Характеристики

Тип файла
PDF-файл
Размер
126,39 Kb
Тип материала
Высшее учебное заведение

Тип файла PDF

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

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее