Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Стандартная часть таблицы символов ASCIIСодержание книги
Поиск на нашем сайте
Некоторые из вышеперечисленных символов имеют особый смысл. Так, например, символ с кодом 9 обозначает символ горизонтальной табуляции, символ с кодом 10 – символ перевода строки, символ с кодом 13 – символ возврата каретки. Дополнительная часть таблицы символов
В таблицах обозначение КС означает «код символа», а С – «символ».
Операции языка Си Операции приведены в порядке убывания приоритета, операции с разными приоритетами разделены чертой.
Возможности препроцессора
Препроцессор, как мы уже знаем, это программа предварительной обработки исходного текста программы перед этапом компиляции. Чаще всего препроцессор автоматически вызывается на этапе компиляции, если в исходном тексте обнаружена хотя бы одна его директива. Признаком директивы препроцессора является символ #. При необходимости продолжения директивы в следующей строке текущую строку должен завершать символ '\'. Возможности препроцессора языка Cи: – лексемное замещение идентификаторов; – макрозамещение; – включение файлов исходного текста; – условная компиляция; – изменение нумерации строк и текущего имени файла.
Директивы лексемного замещения идентификаторов Директива определения значения идентификатора (ID): #define ID строка В результате каждое вхождение в исходный текст элемента ID заменяется на значение элемента строка: #define L_bufs 2048 #define binary int #define WAIT fflush(stdin); getch() #define BEEP sound(800);\ delay(100);\ nosound() Лексемное замещение весьма удобно для сокращения записи повторяющихся фрагментов теста и определения символических констант: #define YES 1 #define NO 2 #define ESC 27 #define Enter 30 которые могут быть в дальнейшем использованы: if (x==ESC) break; BEEP; return(YES); Директива отмены #undef ID Далее по исходному тексту можно назначить новое значение такого идентификатора.
Макрозамещение Макрозамещение – обобщение лексемного замещения посредством параметризации строки директивы define в виде: #define ID(параметр 1,...) строка между элементом ID и открывающей скобкой пробелы не допускаются. Такой вариант директивы define иногда называют макроопределением. Элемент строка обычно содержит параметры, которые препроцессором будут заменены на фактические аргументы так называемой макрокоманды, записываемой в формате ID(аргумент 1,...) Пример макроопределения и макрокоманд: #define P(X) printf ("\n%s",X) ... char *x; P(x); // Использование макроопределения P(X) P(" НАЧАЛО ОПТИМИЗАЦИИ"); printf("\n%s",x); // Эквивалентные операторы printf("\n%s"," НАЧАЛО ОПТИМИЗАЦИИ"); В строке макроопределений идентификаторы параметров сложных выражений рекомендуется заключать в круглые скобки: #define МАХ(A,B) ((A)>(B)? (A):(B)) #define ABS(X) ((X)<0? –(X):(X)) Потребность в круглых скобках возникает при опасности искажения смысла вложенных выражений из-за действия правил приоритета операций. Пример искажения смысла операций: #define BP(X) X*X ... int x,y,z; x=BP(y+z); «x=y+z*y+z; «x=y+(z*y)+z; Очевидно, что ошибки будут и при следующих вариантах: #define BP(X) (X*X) #define BP(X) (X)*(X) Безопасный вариант: #define BP(X) ((X)*(X)) Иногда источником ошибок может быть символ «точка с запятой» в конце строки макроопределения: #define BP(X) ((X)*(X)); ... int x,y,z; x=BP(z)–BP(y); «y=((z)*(z)); –((y)*(y)); Макроопределение отменяется директивой undef. Идентификаторы макроопределений обычно составляют из прописных букв латинского алфавита. Это позволяет отличать макрокоманды от вызова функций. Макрокоманда внешне синтаксически эквивалентна операции вызова функции, но смысл их различен. Функция в программе имеется в одном экземпляре, но на ее вызов тратится время для подготовки параметров и передачи управления. Каждая макрокоманда замещается соответствующей частью макроопределения, но потерь на передачу управления нет. Подключение файлов исходного текста Напомним, что имеются два варианта запроса включения в текущий файл содержимого другого файла. Директива #include < ID_ файла > вводит содержимое файла из стандартного каталога (обычно – include), а директива #include " ID_ файла " организует последовательный поиск в текущем, системном и стандартном каталогах. Например: #include <alloc.h> // Средства распределения памяти #include <dos.h> // Обращения к функциям ОС #include "a:\prs\head.h" // Включение файла пользователя Рекомендуется описания системных объектов включать из стандартных каталогов и размещать их в начале файла исходного текста программы. Системные объекты в результате получают атрибут области действия «глобальный», что устраняет неоднозначность их описания.
Условная компиляция Директивы условной компиляции и реализуемые правила включения исходного текста: а) условное включение (аналог работы оператора if): #if<предикат_условия> ТЕКСТ_1 #endif б) альтернативное включение (аналог if - else): #if<предикат_условия> ТЕКСТ_1 #else ТЕКСТ_2 #endif Виды предикатов условий: константное_выражение ® истина, если его значение ¹0; def ID ® истина, если ID был определен ранее оператором # define; ndef ID ® истина, если ID не был определен оператором # define. Константное_выражение отделяется от ключевого слова if разделителем, а def и ndef – нет. Пример: #ifdef DEBUG print_state(); #endif Элементы исходного текста «ТЕКСТ_1» или «ТЕКСТ_2» могут содержать любые директивы препроцессора. Примеры: #ifndef EOF #define EOF –1 #endif #if UNIT==CON #include "conproc.c" #else #include "outproc.c" #endif
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-19; просмотров: 6872; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.49.143 (0.011 с.) |