🗊Презентация Препроцессор языка «С». Директивы препроцессора. Модули и модульное программирование

Нажмите для полного просмотра!
Препроцессор языка «С». Директивы препроцессора. Модули и модульное программирование, слайд №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

Содержание

Вы можете ознакомиться и скачать презентацию на тему Препроцессор языка «С». Директивы препроцессора. Модули и модульное программирование. Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Лекция 11
Препроцессор языка «С».
Директивы препроцессора.
Модули и модульное программирование
Описание слайда:
Лекция 11 Препроцессор языка «С». Директивы препроцессора. Модули и модульное программирование

Слайд 2





Препроцессор
Препроцессор – программа, осуществляющая обработку   текста    программы   перед  ее непосредственной компиляцией. Обработка осуществляется согласно специальным указаниям, называемым директивами препроцессора.
Формат записи директивы имеет вид: 
#директива параметры директивы
Описание слайда:
Препроцессор Препроцессор – программа, осуществляющая обработку текста программы перед ее непосредственной компиляцией. Обработка осуществляется согласно специальным указаниям, называемым директивами препроцессора. Формат записи директивы имеет вид: #директива параметры директивы

Слайд 3





Препроцессор
Описание директивы препроцессора всегда начинается с новой строки и заканчивается в конце строки.

Поэтому:
на одной строке может быть записана только одна директива.
одна директива может быть записана в нескольких строках. Для этого на конце каждой строки (кроме последней) ставится символ ‘\’.

Пример:
#директива описание директивы \
  продолжение описания директивы \
  завершение описания директивы
Описание слайда:
Препроцессор Описание директивы препроцессора всегда начинается с новой строки и заканчивается в конце строки. Поэтому: на одной строке может быть записана только одна директива. одна директива может быть записана в нескольких строках. Для этого на конце каждой строки (кроме последней) ставится символ ‘\’. Пример: #директива описание директивы \ продолжение описания директивы \ завершение описания директивы

Слайд 4





Директива include
Директива include осуществляет вставку в программу текста из другого файла. В основном эта директива используется для подключения заголовочных файлов.
Имя файла указывается заключенным в знаки ‘<‘ и ‘>’, если файл находится в каталоге include среды разработки. Как правило в настройках среды разработки можно указать перечень каталогов которых будет производится поиск.
//Подключение файла stdio.h из каталога include
#include <stdio.h>
//Подключение файла types.h из подкаталога sys каталога include
#include <sys\types.h>
Описание слайда:
Директива include Директива include осуществляет вставку в программу текста из другого файла. В основном эта директива используется для подключения заголовочных файлов. Имя файла указывается заключенным в знаки ‘<‘ и ‘>’, если файл находится в каталоге include среды разработки. Как правило в настройках среды разработки можно указать перечень каталогов которых будет производится поиск. //Подключение файла stdio.h из каталога include #include <stdio.h> //Подключение файла types.h из подкаталога sys каталога include #include <sys\types.h>

Слайд 5





Директива include
Имя файла указывается заключенным в двойные кавычки, если файл находится в произвольном месте, а не в стандартном каталоге.
В таком случае, если файл находится в текущем каталоге (там же, где и программа), то указывается только имя файла. Например:
#include “data.h”
Если файл находится не в текущем каталоге, то можно указать относительное или абсолютное имя файла. Например:
#include “data\data.h” //В подкаталоге data текущего каталога
#include “..\data.h”      //В родительском каталоге текущего каталога
#include “e:\data\data.h”  //В каталоге data на диске e.
#include “\data\data.h”  //В каталоге data на текущем диске.
Описание слайда:
Директива include Имя файла указывается заключенным в двойные кавычки, если файл находится в произвольном месте, а не в стандартном каталоге. В таком случае, если файл находится в текущем каталоге (там же, где и программа), то указывается только имя файла. Например: #include “data.h” Если файл находится не в текущем каталоге, то можно указать относительное или абсолютное имя файла. Например: #include “data\data.h” //В подкаталоге data текущего каталога #include “..\data.h” //В родительском каталоге текущего каталога #include “e:\data\data.h” //В каталоге data на диске e. #include “\data\data.h” //В каталоге data на текущем диске.

Слайд 6





Директива define
Директива   define    предназначена   для проведения замен и создания макросов.
Создание автозамен:
#define   идентификатор   строка-подстановка   перевод_строки

Примеры:
#define   PI    3.14159265358979323
#define expr  pow(x, 2+3*y)

Использование:
double  x = 2.0*PI, y = 2.0;
double res = expr;
Описание слайда:
Директива define Директива define предназначена для проведения замен и создания макросов. Создание автозамен: #define идентификатор строка-подстановка перевод_строки Примеры: #define PI  3.14159265358979323 #define expr pow(x, 2+3*y) Использование: double x = 2.0*PI, y = 2.0; double res = expr;

Слайд 7





Директива define
Создание макросов
#define идентификатор([параметр-идентификатор[, …]])  
 					строка-подстановка   перевод_строки
Пример
#define sqr(x) pow(x,2.0)	sqr(a) → pow(a,2.0)
Неправильное объявление макроса:
#define sqr(x) x * x
Использование: sqr(x+1) → x + 1 * x + 1	 //2*x+1
Правильное объявление макроса:
#define sqr(x) (x) * (x)
Использование: sqr(x+1) → (x + 1) * (x + 1)	//(x+1)^2
Описание слайда:
Директива define Создание макросов #define идентификатор([параметр-идентификатор[, …]]) строка-подстановка перевод_строки Пример #define sqr(x) pow(x,2.0) sqr(a) → pow(a,2.0) Неправильное объявление макроса: #define sqr(x) x * x Использование: sqr(x+1) → x + 1 * x + 1 //2*x+1 Правильное объявление макроса: #define sqr(x) (x) * (x) Использование: sqr(x+1) → (x + 1) * (x + 1) //(x+1)^2

Слайд 8





Директива define
Параметр макроса может быть преобразован к строке (stringizing). Для этого используется специальный формат записи параметра макроса в описании реализации: #имя_параметра
Пример:
#define prn(str) puts(#str)
Использование: prn(hello!) → puts(“hello!”)
Пример:
#define printval(val)  printf(#val "=%d\n",val)
int value = 10;
printval(value); 		//printf(“value=%d\n”,value) → value=10
Описание слайда:
Директива define Параметр макроса может быть преобразован к строке (stringizing). Для этого используется специальный формат записи параметра макроса в описании реализации: #имя_параметра Пример: #define prn(str) puts(#str) Использование: prn(hello!) → puts(“hello!”) Пример: #define printval(val) printf(#val "=%d\n",val) int value = 10; printval(value); //printf(“value=%d\n”,value) → value=10

Слайд 9





Директива define
Можно создавать макросы в которых параметр становится частью лексемы программы (token-pasting). Для этого в описании реализации макроса к параметру обращаются в формате: ##имя_параметра.
При этом действует следующее ограничение: этот параметр не может быть отдельной лексемой или являться ее началом.
Примеры:
#define nvar(n)  int g_var##n = n;
nvar(1) → int g_var1 = 1;
nvar(2) → int g_var2 = 2;
Описание слайда:
Директива define Можно создавать макросы в которых параметр становится частью лексемы программы (token-pasting). Для этого в описании реализации макроса к параметру обращаются в формате: ##имя_параметра. При этом действует следующее ограничение: этот параметр не может быть отдельной лексемой или являться ее началом. Примеры: #define nvar(n)  int g_var##n = n; nvar(1) → int g_var1 = 1; nvar(2) → int g_var2 = 2;

Слайд 10





Директива define
В макрос можно передавать неограниченное количество параметров. Для этого в описании заголовка макроса в списке параметров указывается троеточие, а обращение к каждому параметру макроса осуществляется с помощью специального идентификатора __VA_ARGS__
Пример:
#define prn_varargs(...) puts(#__VA_ARGS__)
prn_varargs(0); → puts(“0”);
prn_varargs(one, two, three); → puts(“one, two, three”);
Пример:
#define vars(type,...) type __VA_ARGS__
vars(int,v1,v2,v3);   	//int v1, v2, v3
v1 = 1; v2 = 2; v3 = 3;
printf("%d %d %d\n",v1,v2,v3);
Описание слайда:
Директива define В макрос можно передавать неограниченное количество параметров. Для этого в описании заголовка макроса в списке параметров указывается троеточие, а обращение к каждому параметру макроса осуществляется с помощью специального идентификатора __VA_ARGS__ Пример: #define prn_varargs(...) puts(#__VA_ARGS__) prn_varargs(0); → puts(“0”); prn_varargs(one, two, three); → puts(“one, two, three”); Пример: #define vars(type,...) type __VA_ARGS__ vars(int,v1,v2,v3); //int v1, v2, v3 v1 = 1; v2 = 2; v3 = 3; printf("%d %d %d\n",v1,v2,v3);

Слайд 11





Директива define
Примеры:
#define ver(maj,min)  #maj "." #min
char *version=ver(1,0); → char *version=“1.0”; 
#define var(type, name, value) type name = value;
var (double,val,10.0); → double val=10.0;
#define exchange(type,val1,val2) {\
 type tmp = val1;\
 val1 = val2;\
 val2 = tmp;\
}
Описание слайда:
Директива define Примеры: #define ver(maj,min)  #maj "." #min char *version=ver(1,0); → char *version=“1.0”; #define var(type, name, value) type name = value; var (double,val,10.0); → double val=10.0; #define exchange(type,val1,val2) {\ type tmp = val1;\ val1 = val2;\ val2 = tmp;\ }

Слайд 12





Директива define
Автозамены, макросы и простые определения, сделанные с помощью директивы #define можно отменять с помощью директивы #undef. Затем их можно снова определить.
Пример:
#define prn puts("One!")
  prn;  //puts(“One!”);
#undef prn
#define prn puts("Two!")
  prn; //puts(“Two!”);
#undef prn
  prn;  //Ошибка – prn не определено
Описание слайда:
Директива define Автозамены, макросы и простые определения, сделанные с помощью директивы #define можно отменять с помощью директивы #undef. Затем их можно снова определить. Пример: #define prn puts("One!") prn; //puts(“One!”); #undef prn #define prn puts("Two!") prn; //puts(“Two!”); #undef prn prn; //Ошибка – prn не определено

Слайд 13





Директива error
Директива error используется для  создания сообщения об ошибке во время компиляции.
Формат:
#error строка_описания_ошибки

Пример:
#define prn puts("One!")
  prn;
#undef prn
#ifndef prn
  #error prn must be defined!
#endif
  prn;
Описание слайда:
Директива error Директива error используется для создания сообщения об ошибке во время компиляции. Формат: #error строка_описания_ошибки Пример: #define prn puts("One!") prn; #undef prn #ifndef prn #error prn must be defined! #endif prn;

Слайд 14





Директива pragma
Директива pragma осуществляет указание некоторых особенностей компилятору.
#pragma optimize( [ { time | size | none } ] )
#pragma message( string )
#pragma startup function
#pragma exit function
#pragma code_seg( [ "name" ] )
#pragma data_seg( [ "name" ] )
#pragma const_seg( [ "name" ] )
#pragma once
Описание слайда:
Директива pragma Директива pragma осуществляет указание некоторых особенностей компилятору. #pragma optimize( [ { time | size | none } ] ) #pragma message( string ) #pragma startup function #pragma exit function #pragma code_seg( [ "name" ] ) #pragma data_seg( [ "name" ] ) #pragma const_seg( [ "name" ] ) #pragma once

Слайд 15





Директива pragma
void start(void)
{
  printf("START function!\n");
}
void finish(void)
{
  printf("FINISH function!\n");
}
#pragma startup start
#pragma exit finish
int main(int argc, char *argv[])
{
  printf("MAIN function!\n");
  return 0;
}
Описание слайда:
Директива pragma void start(void) { printf("START function!\n"); } void finish(void) { printf("FINISH function!\n"); } #pragma startup start #pragma exit finish int main(int argc, char *argv[]) { printf("MAIN function!\n"); return 0; }

Слайд 16





Директива pragma
void start1(void)
{
  printf("START1 function!\n");
}
void start2(void)
{
  printf("START2 function!\n");
}
void finish1(void)
{
  printf("FINISH1 function!\n");
}
void finish2(void)
{
  printf("FINISH2 function!\n");
}
Описание слайда:
Директива pragma void start1(void) { printf("START1 function!\n"); } void start2(void) { printf("START2 function!\n"); } void finish1(void) { printf("FINISH1 function!\n"); } void finish2(void) { printf("FINISH2 function!\n"); }

Слайд 17





Директивы условной компиляции
Описание слайда:
Директивы условной компиляции

Слайд 18





Директивы условной компиляции
Примеры:
#define A 5
#if A>10
  puts(“Message 1”);
#else
  puts(“Message 2”);
#endif
Описание слайда:
Директивы условной компиляции Примеры: #define A 5 #if A>10 puts(“Message 1”); #else puts(“Message 2”); #endif

Слайд 19





Директивы условной компиляции
#ifndef идентификатор
…
#endif
Описание слайда:
Директивы условной компиляции #ifndef идентификатор … #endif

Слайд 20





Директивы условной компиляции
Примеры:
#define DEBUG_MODE
…
#ifdef DEBUG_MODE
  puts(“Режим отладки”);
#endif
Описание слайда:
Директивы условной компиляции Примеры: #define DEBUG_MODE … #ifdef DEBUG_MODE puts(“Режим отладки”); #endif

Слайд 21





Диагностика
Библиотека <assert.h>
void assert(int выражение)
Отмена действия – определить имя NDEBUG до подключения библиотеки assert.h
Описание слайда:
Диагностика Библиотека <assert.h> void assert(int выражение) Отмена действия – определить имя NDEBUG до подключения библиотеки assert.h

Слайд 22





Диагностика
Ввести два целых числа. Разделить первое число на второе. Если второе число – ноль, то остановить программу используя макрос assert.
#include <stdio.h>
#include <assert.h>
int main(int argc, char *argv[])
{
  int a,b;
  printf("Puts numers A and B: ");
  scanf("%d %d",&a,&b);
  assert(b!=0);
  printf("%d\n", a/b);
  return 0;
}
Описание слайда:
Диагностика Ввести два целых числа. Разделить первое число на второе. Если второе число – ноль, то остановить программу используя макрос assert. #include <stdio.h> #include <assert.h> int main(int argc, char *argv[]) { int a,b; printf("Puts numers A and B: "); scanf("%d %d",&a,&b); assert(b!=0); printf("%d\n", a/b); return 0; }

Слайд 23





Модуль
Модуль (библиотека) –  совокупность типов данных, переменных, констант и функций для работы с этими типами данных.
Основное предназначение:
повторное использование разработанного ранее кода,
улучшение процесса разработки программ.
Описание слайда:
Модуль Модуль (библиотека) – совокупность типов данных, переменных, констант и функций для работы с этими типами данных. Основное предназначение: повторное использование разработанного ранее кода, улучшение процесса разработки программ.

Слайд 24





Структура модуля
Две основные части:
интерфейс (заголовок модуля – файл .h);
реализация (реализация модуля файл .с).
Описание слайда:
Структура модуля Две основные части: интерфейс (заголовок модуля – файл .h); реализация (реализация модуля файл .с).

Слайд 25





Заголовок модуля
Заголовок модуля – интерфейсная часть, представленная    в     виде    файла   с расширением .h.
Основное содержание:
описание внешних типов данных; 
описание внешних переменных и констант;
описание прототипов внешних функций.
Описание слайда:
Заголовок модуля Заголовок модуля – интерфейсная часть, представленная в виде файла с расширением .h. Основное содержание: описание внешних типов данных; описание внешних переменных и констант; описание прототипов внешних функций.

Слайд 26





Реализация модуля
Реализация модуля – файл с расширением .c
Основное содержание:
описание внутренних типов данных;
описание внутренних и внешних переменных и констант;
реализация внешних и внутренних функций.
Описание слайда:
Реализация модуля Реализация модуля – файл с расширением .c Основное содержание: описание внутренних типов данных; описание внутренних и внешних переменных и констант; реализация внешних и внутренних функций.

Слайд 27





Правила описания внешних переменных
	Объявление внешней переменной с возможной           ее инициализацией осуществляется в файле текста программы модуля, а в файле заголовков такая переменная описывается как внешняя (класс   памяти extern) без какой-либо инициализации.
Описание слайда:
Правила описания внешних переменных Объявление внешней переменной с возможной ее инициализацией осуществляется в файле текста программы модуля, а в файле заголовков такая переменная описывается как внешняя (класс памяти extern) без какой-либо инициализации.

Слайд 28





Подключение модулей
Подключение модуля в программу осуществляется двумя действиями:
подключение файла заголовка модуля с помощью директивы #include;
подключение файла текста программы модуля в проект.
Описание слайда:
Подключение модулей Подключение модуля в программу осуществляется двумя действиями: подключение файла заголовка модуля с помощью директивы #include; подключение файла текста программы модуля в проект.

Слайд 29





Частные случаи модулей
Модуль      содержит       только      часть реализацию:   единственный   модуль   в программе, содержащий только функцию main.
Модуль содержит только часть заголовок: в     модуле     производится      описание глобальных типов данных.
Описание слайда:
Частные случаи модулей Модуль содержит только часть реализацию: единственный модуль в программе, содержащий только функцию main. Модуль содержит только часть заголовок: в модуле производится описание глобальных типов данных.

Слайд 30





Использование условной компиляции
При  многократном  подключении   модуля необходимо организовать однократность его  компиляции.  Это  осуществляется с использованием     директив    условной компиляции в файле заголовка модуля в формате:

#ifndef имя_модуля
#define имя_модуля
… текст заголовка модуля …
#endif 
ИЛИ
#pragma once
Описание слайда:
Использование условной компиляции При многократном подключении модуля необходимо организовать однократность его компиляции. Это осуществляется с использованием директив условной компиляции в файле заголовка модуля в формате: #ifndef имя_модуля #define имя_модуля … текст заголовка модуля … #endif ИЛИ #pragma once



Похожие презентации
Mypresentation.ru
Загрузить презентацию