Разделы презентаций


Директивою препроцесора називається рядок у вихідному коді, що має наступний

Мова С++Лекція 12Макроси

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

Слайд 1Директивою препроцесора називається рядок у вихідному коді, що має наступний

формат: # ключве_слово параметри
Список ключових слів:
define -

створення константи або макросу;
undef - видалення константи або макросу;
include - вставка вмісту вказаного файлу;
if - перевірка істинності вираження;
ifdef - перевірка існування константи або макросу;
ifndef - перевірка не існування константи або макросу;
else - гілка умовної компіляції при хибності вираження if;
elif - перевірка істинності іншого виразу; коротка форма запису для комбінації else і if;
endif - кінець гілки умовної компіляції;
line - вказівка ​​імені файлу і номера поточного рядка для компілятора;
error - вивід повідомлення і зупинка компіляції;
warning - вивід повідомлення без зупинки компіляції;
pragma - вказівка ​​дії, залежного від реалізації, для препроцесора або компілятора;
якщо ключове слово не вказано, директива ігнорується;
якщо вказано неіснуюче ключове слово, виводиться повідомлення про помилку і компіляція переривається.
Директивою препроцесора називається рядок у вихідному коді, що має наступний формат:     # ключве_слово

Слайд 2Мова С++
Лекція 12

Макроси

Мова С++Лекція 12Макроси

Слайд 3Макроси
Макрос – фрагмент коду, який виглядає як функція, але не

є нею.
Відмінності між макросом та функцією:
Макрос замінюється своїм визначенням під

час роботи препроцесора і тому не викликає додаткових затрат часу на виклик.
Використання макросу приводить до розростання коду і збільшення програми
Компілятор не виконує ніяких перевірок типів у макросі
Неможливо оголосити вказівник на макрос або використати його адресу, оскільки макрос є засобом для вбудовування фрагмента коду.

Імена макросів прийнято записувати великими буквами.


1
МакросиМакрос – фрагмент коду, який виглядає як функція, але не є нею.Відмінності між макросом та функцією:Макрос замінюється

Слайд 4Звичайний макрос
#define MAXN 1000
Функціональний макрос
#define abs(x) ((x)>=0?(x):-(x))
#define max(a,b) ((a)>(b)?(a):(b))

Макрос з

використанням вказівників
#define mSum(pVar1, pVar2) ((*(pVar1)) +

(*(pVar2)))


2
Звичайний макрос#define MAXN 1000Функціональний макрос#define abs(x) ((x)>=0?(x):-(x))#define max(a,b) ((a)>(b)?(a):(b))Макрос з використанням вказівників    #define mSum(pVar1,

Слайд 5Приклади
#include
#include
#define MULT(x,y) ((x)*(y))

using namespace std;

int main(int argc,

char *argv[])
{
int a=2, b=2;
printf ("rez=%d\n",MULT(a,b));

system("PAUSE");
return EXIT_SUCCESS;
}

3
Приклади #include #include #define MULT(x,y) ((x)*(y))using namespace std;int main(int argc, char *argv[]){  int a=2, b=2;

Слайд 6#include
#include
#define MULT(x,y) (x*y)
using namespace std;
int main(int argc, char

*argv[])
{
int a=2, b=3;
printf ("rez1=%d\n",MULT(a,b));
printf

("rez2=%d\n",MULT(a+1,b));
system("PAUSE");
return EXIT_SUCCESS;
}

#include
#include
#define MULT(x,y) ((x)*(y))
using namespace std;
int main(int argc, char *argv[])
{
int a=2, b=3;
printf ("rez1=%d\n",MULT(a,b));
printf ("rez2=%d\n",MULT(a+1,b));
system("PAUSE");
return EXIT_SUCCESS;
}



4

#include #include #define MULT(x,y) (x*y)using namespace std;int main(int argc, char *argv[]){  int a=2, b=3;  printf

Слайд 7 #include

#define mSum(pVar1, pVar2) ((*(pVar1)) +

(*(pVar2)))

void main(void)
{

int nVar1 = 5;
int nVar2 = 8;
int *pVar1 = &nVar1;
int *pVar2 = &nVar2;

printf("\n%d + %d = %d\n\n", nVar1, nVar2, Sum(pVar1, pVar2));
}


5
#include    #define mSum(pVar1, pVar2) ((*(pVar1)) + (*(pVar2)))   void main(void)

Слайд 8Правильно оформлений макрос:
#define MACRO(x) printf(“%d”, x)

Неправильно оформлений макрос (лишній пробіл):
#define

MACRO (x) printf(“%d”,x)
буде розкритий як:
(x) printf(“%d”,x);

Якщо

макрос розміщується в кількох рядках:
#define WARN_IF(EXP) \
do { if (EXP) \
fprintf (stderr, "Warning: " #EXP "\n"); } \
while (0)

6
Правильно оформлений макрос:#define MACRO(x) printf(“%d”, x)Неправильно оформлений макрос (лишній пробіл):#define MACRO (x) printf(“%d”,x)   буде розкритий

Слайд 9 Локальні змінні в макросах
У макросах можна використовувати локальні змінні. Якщо ім'я такої локальної

змінної співпаде з ім'ям глобальної, то глобальна змінна буде закрита

локальною всередині макросу. Але присвоєння значень локальній змінній не вплине на глобальну. Приклад макросу:
#include
#include
#define mSum(pVar) int mr_nVar = ((*(pVar)) + 1);\
((*(pVar)) = (*(pVar)) + mr_nVar)
using namespace std;
int main()
{
int nVar = 5;
int *pVar = &nVar;
mSum(pVar);
printf("\nsum = %d\n\n", *pVar);
system("PAUSE");
return EXIT_SUCCESS;
}
7
Локальні змінні в макросахУ макросах можна використовувати локальні змінні. Якщо ім'я такої локальної змінної співпаде з ім'ям глобальної, то

Слайд 10 Блоки в макросах
У макросах можна застосовувати фігурні дужки, таким чином

отримувати блок.

#include
#include
using namespace std;
#define mSum(pVar) {(*(pVar)) +=

10;}

int main()
{
int nVar = 5;
int *pVar = &nVar;
if(nVar > 0)
mSum(pVar);
printf("\nsum = %d\n\n", *pVar);
system("PAUSE");
return EXIT_SUCCESS;
}
8
Блоки в макросахУ макросах можна застосовувати фігурні дужки, таким чином отримувати блок.#include #include using namespace std;

Слайд 11 Макроси зі змінним числом параметрів
Макроси в C можуть мати змінне

число параметрів. Такі макроси називають variadic macros.

#include

#define mMyPrint(...) printf(__VA_ARGS__)
int main()
{
char *szFirst = "This is ";
char *szSecond = "a variadic macro";
mMyPrint("\n%s%s\n\n", szFirst, szSecond);
system("PAUSE");
return EXIT_SUCCESS;
}

Правила тут такі:
змінні параметри позначаємо трьома крапками;
якщо є і іменовані параметри, то змінні параметри повинні бути останніми в списку параметрів
в тілі макросу змінні параметри замінюють ідентифікатором __VA_ARGS__
9
Макроси зі змінним числом параметрівМакроси в C можуть мати змінне число параметрів. Такі макроси називають variadic

Слайд 12 Запуск з макросу іншого макросу
#include

#define

mFirstMacro(nVar) ((nVar) + mSecondMacro(nVar))
#define mSecondMacro(nVar) ((nVar) *

2)

int main()
{
int nVar = 5;
printf("\nnVar = %d\n\n", mFirstMacro(nVar));
system("PAUSE");
return EXIT_SUCCESS;
}


10
Запуск з макросу іншого макросу #include    #define mFirstMacro(nVar) ((nVar) + mSecondMacro(nVar))

Слайд 13 Як за допомогою макросу перетворити об'єкт в рядок?
#include

#define mIntToStr(nVar) (#nVar)
int main()
{
printf("\n3 =

%s\n\n", mIntToStr(1 + 2));
system("PAUSE");
return EXIT_SUCCESS;
}


#include
#define mIntToStr(nVar) (nVar)
int main()
{
printf("\n3 = %s\n\n", mIntToStr(1 + 2));
system("PAUSE");
return EXIT_SUCCESS;
}




11

Як за допомогою макросу перетворити об'єкт в рядок? #include    #define mIntToStr(nVar) (#nVar) int

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика