bmstu_iu6_Cpp1 (823967), страница 19

Файл №823967 bmstu_iu6_Cpp1 (Методические пособия по C++ Г.С.Иванова 3 части) 19 страницаbmstu_iu6_Cpp1 (823967) страница 192021-07-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 19)

Однако соответствующая константа считается определенной и при проверке командой if defined(или ifdef) или if !defined (или ifndef) возвращает «Константа определена».Команда #undef используется для отмены команды #define. Формат команды:#undef <Имя>После выполнения этой команды замена идентификатора на строку прекращается.6.3 Команды условной компиляцииСпециальные команды препроцессора позволяют осуществлять условную генерациютекста программы. При этом используются две конструкции:#if <Константное выражение><Операторы языка и команды препроцессора>[#else<Операторы языка и команды препроцессора>]#endifили#if <Константное выражение><Операторы языка и команды препроцессора >#elif <Константное выражение><Операторы языка и команды препроцессора>[#else<Операторы языка и команды препроцессора>]#endifПри этом в обоих случаях сначала осуществляется проверка заданного константноговыражения.

Если результат этого выражения отличен от нуля, то в текст вставляются следующие за #if операторы языка и команды препроцессора. Если результат выражения равен 0, то в первом варианте в текст вставляются операторы языка и команды препроцессора, следующие за #else, а во втором варианте – осуществляется дополнительная проверка второго константного выражения. И если результат проверки второго выражения отличен от нуля, то в текст программы вставляются операторы языка и команды препроцессора, следующие за #elif, иначе в текст вставляются операторы языка и команды пре-Оглавление127процессора, следующие за #else. Альтернатива #else в обоих вариантах может бытьопущена.Таким образом, команды условной генерации позволяют изменять исходный текстпрограммы в зависимости от значений некоторых констант.Команда #error используется для вывода сообщений об особенностях генерации.Формат команды#error <Сообщение>Команды #ifdef и #ifndef используются как альтернативы соответственно:#if defined(<Идентификатор>) и #if !defined(<Идентификатор>), гдеdefined – специальная функция препроцессора, возвращающая 1, если заданный идентификатор определен командой #define и это определение не отменено командой#undef.С использованием этих команд выполняется, например, защита от повторной компиляции подключаемых файлов:#ifndef MyTerm_h// если не определена константа#define MyTerm_h// определяем константу как пустую… Подключение файлов и исходные тексты …#endifПервый раз константа не определена, и текст внутри фрагмента подключается.

Однако уже при первом входе во фрагмент константа определяется посредством #define. Соответственно следующий раз константа уже будет определена, и фрагмент подключаться небудет.Ниже приведены еще два примера использования условной макрогенерации:а) #if !define(MODEL)#error Building model not defined#endifб) #if defined(NEARPOINTERS)space=farcoreleft();#elif defined(FARPOINTERS)space=coreleft();#else#error Unsupported memory model#endifОглавление1286.4 Некоторые предопределенные макроопределенияDATE – текстовая строка, содержащая дату компиляции в формате Mmm dd yyyy, гдеMmm – название месяца, dd – число и yyyy – год.FILE – текстовая строка, содержащая имя компилируемого файла, включая полныйпуть к нему.LINE– номер текущей строки в десятичном формате.

Может быть изменендирективой #line.TIME – текстовая строка, содержащая время компиляции в формате hh:mm:ss, где hh– часы, mm – минуты, ss - секунды.TIMESTAMP – текстовая строка, содержащая дату и время последнего изменениякомпилируемого файла, в формате Ddd Mmm Date hh:mm:ss yyyy, где Ddd – сокращениеназвания дня недели, Date – число.FUNCTION – текстовая строка, содержащая название функции, внутри которойвставлено макроопределение.Пример. Создание макрокоманды отладочной печати:#ifdef _DEBUG#define DEBUG_OUTPUT \printf( "%s\t%s\t%d\n",__FILE__,__FUNCTION__,__LINE__ );#else#define DEBUG_OUTPUT#endifПри наличии такой макрокоманды в тексте программы, где необходим отладочныйвывод, достаточно вставить строку вида:DEBUG_OUTPUT("file error…");чтобы было сгенерировано детальное сообщение об ошибке.STDC – наличие макроопределения сообщает о том, что компилятор удовлетворяеттребованию стандарта ANSI C.cplusplus – определено в том случае, если компилируется программа на C++.Пример.

Подключение заголовочного файла bdb.h, написанного на языке Cи,независимо от того, компилируется ли Cи или C++ программа:#ifdef __cplusplusextern "C"{#endif#include <bdb.h>Оглавление129#ifdef __cplusplus};#endifПримечание. Необходимость отдельно обрабатывать Cи-заголовочные файлы связанас тем, что в C и C++ используются различные схемы преобразования имен функций прикомпиляции. Поэтому библиотека, полученная компилятором Cи, может быть подключенак С++ программе только в том случае, если имена функций совпадают, что и делаетобеспечивает директива "C".DEBUG– определено в том случае, если компилируется отладочная версияпрограммы.MSC_VER – содержит версию компилятора.

Microsoft Visual C++ .NET 2003 – 1310,где 13 – номер версии, 1.0 - реализация. Visual C++ 2005 – 1400, Visual C++ 2008 - 1500.WIN32 – определено при компиляции программ для Win32 и Win64.WIN64 – определено при компиляции программ для Win64.Контрольные вопросы к 6 главе1. Что такое препроцессор С++?Ответ.2. Каково назначение команды #include?Ответ.3. Какая команда используется для описания макроопределений?Ответ.4. Что такое условная генерация?Ответ.5. Какие команды применяются для условной генерации программы?Ответ.6. Какие команды позволяют выполнить защита от повторной компиляции подключаемыхфайлов?Ответ.7. Какие предопределенные макроопределения вы помните?Ответ.Оглавление130ЛИТЕРАТУРА1.

Агабеков Л.Е., Иванова Г.С. Программирование на С++. Учебное пособие покурсам «Системное программирование», «Вычислительная техника и информационнаятехнология»,«ПрограммированиенаС++».Часть1.Средствапроцедурногопрограммирования.– М.: МГТУ им. Н.Э.

Баумана, 1997.2. Подбельский В.В. Язык С++: Учеб. пособие. – М.: Финансы и статистика, 2006.Оглавление131ПРИЛОЖЕНИЕ А ОПТИМИЗАЦИЯ КОДА ПРОГРАММЫСовременные компиляторы включают средства оптимизации кода программ дляуменьшения размера исполняемого файла или ускорения работы программы.При оптимизации выполняются:•размножение и сверка констант – многократная подстановка значения переменной вместо обращения к ней, если в программе она не меняется, а такжезамена в тексте программы результата арифметических операций над значениями таких переменных вместо выполнения этих операций при запускепрограммы;•вычисление константных выражений – подстановка результата вместо последовательности действий.

Например, если в программе необходимоподставить число секунд в году, то целесообразно написать выражение3600*24*365, но не 31536000, поскольку это упрощает понимание программистом текста программы и избавляет от лишних ошибок, связанных с непониманием значения написанной константы;•удаление неиспользуемых присваиваний, лишних выражений – позволяетустранить из текста программы присвоения значений переменным, которыенигде не используются.

Если в программе нет последующего обращения кзначению переменной, она не будет создана в результирующем коде;•замена операций целочисленных деления и умножения на операции сдвигапо возможности;•удаление лишних условий и удаление фрагментов кода со всегда невыполняемым условием, например if (false){…};•оптимизация ветвлений switch и последовательностей if(){}else if(){}….–позволяет уменьшить количество необходимых операций сравнения за счетпреобразования линейной последовательности сравнений в дерево;•оптимизация циклов, включая замену предусловий на постусловия и заменуциклов с инкрементом на циклы с декрементом для приведения к сравнениюпеременной-счетчика с нулём;•замена функций вставками inline по возможности.Среда разработки MS Visual Studio по умолчанию предоставляет два режима сборки программы: Debug и Release.

В первом случае программа собирается с отладочной инОглавление132формацией и отключенной оптимизацией. Во втором – отладочная информация не подключается, поэтому невозможно просмотреть состояние переменных при пошаговой отладке, однако включена оптимизация.При необходимости режим оптимизации может быть включен и в отладочном режиме, однако следует помнить, что в этом случае текст программы не будет однозначносоответствовать сгенерированному компилятором коду (как по причине исключения, так ипо причине добавления нового кода и изменения порядка выполнения исходных операторов программы), поэтому пошаговая отладка будет затруднена.Оглавление133ПРИЛОЖЕНИЕ Б НЕКОТОРЫЕ ОПЦИИ КОМПИЛЯТОРА ИКОМПОНОВЩИКАСборка программы в MS Visual Studio невозможна без создания проекта.

Управление опциями компилятора и компоновщика при использовании MS Visual Studio возможнонепосредственно из среды разработки (свойства проекта), либо путем их задания в командной строке.Рисунок П2.1 – Настройка свойств проектаНа рисунке П2.1 показана часть дерева параметров проекта, в котором ветвь C/C++обеспечивает управление опциями компилятора, а ветвь Linker – опции компоновщика.Помимо специально выделенных разделов опций, как для компилятора, так и для компоновщика имеется раздел «Command Line», где представлены параметры, которые фактически будут подставлены компилятору или компоновщику при сборке проекта. Здесь же возможно вписать любые дополнительные опции.Рассмотрим некоторые важные разделы.1.

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

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

Список файлов книги

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