Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C. Тема 2. Раздел 1

.pdf
Скачиваний:
15
Добавлен:
21.03.2016
Размер:
808.3 Кб
Скачать

Параметры макросов не имеют типов

Что произойдёт при обработке этого кода? 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"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]