C. Тема 2. Раздел 1
.pdfПараметры макросов не имеют типов
Что произойдёт при обработке этого кода? z = MAX(1.2, &variable);
Параметры в макросы не передаются через стэк
Сколько раз будут вызваны функции x() и y()?
z = MAX(x(), y());
Макросы не имеют адреса
#define AAA 0
printf( "AAA: %d\n", AAA );
#undef AAA
#define AAA 10
printf( "AAA: %d\n", AAA );
Преимущества
Экономия производительности и памяти при замене небольших по размеру функций
Экономия памяти данных при использовании символических констант
Недостатки
При неграмотном использовании могут снизить производительность
Затрудняют отладку
▪Особенно характерно для «парных» макросов, один из которых содержит начало выражения, а второй – окончание выражения
Часть 5
Условная компиляция предназначена для включения или исключения частей исходного кода программы при её компиляции в зависимости от некоторого условия
Типовое применение
Исключение повторного включения файла с помощью #include
Проверка платформы, процессора, конфигурации компиляции (Debug, Release)
|
|
|
Вариант 1 |
Вариант 2 |
Вариант 3 |
#ifdef x |
#if x |
#ifndef x |
... |
... |
... |
#else |
#else |
#else |
... |
... |
... |
#endif |
#endif |
#endif |
int a = 100; #ifdef _DEBUG
printf( "a: %d\n", a ); #endif
Преимущества
Облегчает разработку переносимого кода, не зависящего от платформы
Позволяет легко выключать отладочный код из результирующего кода
Позволяет безопасно по-разному определять макросы с одинаковыми именами в разных частях кода
Недостатки
Сложность выявления ошибок компиляции
Сложность отладки из-за различного проявления ошибок выполнения
Часть 6
Назначение: изменение номера текущей строки и имени файла исходного кода
Синтаксис
#line номер_строки "имя_файла"
Пример
#line 32 "some_file.c"