Лекция 10 Препроцессор. Препроцессор языка Си Препроцессор работает на первом шаге компиляции. Директивы препроцессора: #include#define#undef #ifdef#if#else.

Презентация:



Advertisements
Похожие презентации
Препроцессор языка Си Препроцессор языка Си предназначен для внесения изменений в исходный текст программы непосредственно перед ее компиляцией, а также.
Advertisements

Условная компиляция Условная компиляция C / С++Pascal Условная компиляция выполняется с помощью специальных директив и позволяет выборочно компилировать.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Октябрь Макрообработка (2 часа). Октябрь Основные вопросы Основные понятия. Классификация макропроцессоров. Основные понятия. Классификация.
Лекция 7 Модульность. Причины модульности Структурированность Данные, разделенные по отдельным файлам проще поддаются структурированию, анализу и навигации.
Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
Основы информатики Лекция. Директивы. Исключения Заикин Олег Сергеевич
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
ПРОЦЕДУРЫ И ФУНКЦИИ CPascal Подпрограмма – группа операторов реализующая законченный алгоритм и оформленная как самостоятельная синтаксическая единица.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 3 Ветвления. Инструкции и выражения Выражение становится инструкцией, если в конце его поставить точку с запятой. Выражения: a = b + c, i++, printf(...),
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Лекция 1 Введение в программирование и язык C. Машинный код Машинный код или машинный язык система команд (набор кодов операций) конкретной вычислительной.
Двумерные массивы. В двумерном массиве каждый элемент фиксируется номером строки и столбца, на пересечении которых он расположен. Положение элемента в.
Даная матрица Задача 1. Дана матрица X[0:n-1][0:m-1] и массив Y[0:k-1]. Написать программу, которая вычисляет массив Z, состоящий из элементов X, расположенных.
Выражения языка Си(ч.2). Операции Лекция 3. Основные классы операций арифметические логические поразрядные операции сравнения.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Транксрипт:

Лекция 10 Препроцессор

Препроцессор языка Си Препроцессор работает на первом шаге компиляции. Директивы препроцессора: #include#define#undef #ifdef#if#else #elif#endif#ifndef

Включение файлов Директива включение файла: #include "имя-файла" или #include

Макроподстановка Определение макроподстановки имеет вид: #define Заменяет встречающуюся в тексте программы лексему имя на замещающий-текст. Пример: #define ROWS 7 /* Кол-во строк */ #define COLS 8 /* кол-во столбцов */ void main() { int a[ROWS][COLS];... }

Макроподстановка Подстановка осуществляется только для тех имен, которые расположены вне текстов, заключенных в кавычки. printf("Строк: ROWS, Столбцов: COLS"); выведет на экран: Строк: ROWS, Столбцов: COLS Определение макроподстановки может содержать более ранние макроопределения: Пример: #define ROWS 8 #define COLS (ROWS + 2) /* Выражения лучше указывать */ /* в скобках */ void main() {... for (i = 0; i < COLS * 2; i++)... }

Макроподстановка с аргументами Макроподстановку можно определить с аргументами, вследствие чего замещающий текст будет варьироваться в зависимости от задаваемых параметров. Пример: #define max(A, B) ((A) > (B) ? (A) : (B))... x = max(p+q, r+s); max – не функция! x = max(p+q, r+s); Будет заменено на x = ((p+q) > (r+s) ? (p+q) : (r+s));

Макроподстановка с аргументами Если в замещающем тексте перед формальным параметром стоит знак #, этот параметр будет заменен на аргумент, заключенный в кавычки. Пример: #define dprint(expr) printf(#expr " = %f\n", expr) Обращение к dprint(x/y); развернется в printf("x/y" " = %f\n", x/y); В результате автоматической конкатенации соседних строк получим: printf("x/y = %f\n", x/y);

Макроподстановка с аргументами Оператор ## позволяет в макрорасширениях конкатенировать аргументы. Пример: #define paste(front, back) front ## back paste(name, 1) сгенерирует имя name1

Многострочные определения Для продолжения определения на следующих строках, используется наклонная черта \. Пример: #define swap(t,x,y) t = x;\ x = y;\ y = t;

Макроподстановка с аргументами («подводные камни») 1. Операции инкремента и декремента в аргументах макроподстановки. Пример: max(i++, j++) /* НЕВЕРНО */ Макрос «развернется» в: ((i++) > (j++) ? (i++) : (j++)) 2. Использование скобок #define square(x) x*x /* НЕВЕРНО */ Результатом square (z+1) будет z + 1 * z + 1, а не (z+1)*(z+1)

Условная компиляция Директивы условной компиляции позволяют выборочно включать тот или иной текст программы в зависимости от значения условия, вычисляемого вовремя компиляции. Пример. Включить соответствующий файл для компиляции, в зависимости от операционной системы. #if SYSTEM == WIN32 #define HDR "win32.h" #elif SYSTEM == LINUX #define HDR "linux.h" #elif SYSTEM == MSDOS #define HDR "msdos.h" #else #define HDR "default.h" #endif #include HDR

Условная компиляция Выражение defined(имя) имеет значение 1 если имя определено или 0 если нет. Пример. Недопустить повторного включение в программу файла hdr.h: Файл hdr.h: #if !defined(HDR) #define HDR … #endif Файл main.c: #include "hdr.h" … #include "hdr.h" /* второго включения файла уже не произойдет */

Условная компиляция Прочие директивы условной компиляции: #ifdef – равносильно #if defined(имя) #ifndef – равносильно #if !defined(имя) #undef – "разопределяет" имя