Void main(void)
{
#ifdef TRACE
puts("функция main\n");
#endif
getline();
}
void getline(void)
{
#ifdef TRACE
puts("функция getline");
#else
puts("hello!");
#endif
return;
}
/* текст программы после обработки препроцессором, если */
/* есть #define TRACE нет #define TRACE */
/* содержимое файла stdio.h */ /* содержимое stdio.h */
void getline(void); void getline(void);
void main(void) void main(void)
{ {
puts("функция main\n"); getline();
getline(); }
} void getline(void)
void getline(void) {
{ puts("hello!");
puts("функция getline"); return;
return; }
}
Пример 9.
/* в зависимости от значения MAX получаем три разных загрузочных модуля (генератор программ) текст программы до обработки препроцессором */
#define MAX 3
#include<stdio.h>
Void main(void)
{
#if MAX==5
puts("MAX=5");
#elif MAX==3
puts("MAX=3");
#else
puts("MAX другое");
#endif
}
/* в исходном модуле */
/* MAX равно 3 MAX равно 5 MAX равно 10 */
/* текст программы после обработки препроцессором */
/* содержимое файла stdio.h */
void main(void) void main(void) void main(void)
{ { {
puts("MAX=3"); puts("MAX=5"); puts("MAX другое");
} } }
Примечание. Текст любого системного заголовочного файла может служить примером использования условной компиляции.
ЗАДАНИЕ
Выполнить следующие варианты заданий, используя как можно больше директив препроцессора:
Вариант 1
Ваша программа содержит функцию. Определение функции находится в отдельном файле и чтобы получить загрузочный модуль в Турбо Си++ необходимо составить файл проекта. Напишите текст программы так, чтобы выполнить ее обычным способом.
Вариант 2
Напишите программу, внешне напоминающую вам Паскаль, но которую обработает компилятор языка Си.
Вариант 3 ___сделать это_!!!!!!!!!
Составьте небольшую произвольную программу. Включите строки для отладочного выполнения программы, которые не должны присутствовать при выполнении программы в рабочем режиме. Выполните программу в отладочном и рабочем режимах.
Вариант 4
Определить макрофункцию вычисления куба числа и включить ее в состав программы так, чтобы ею могли воспользоваться и другие программы. Вычислить кубы следующих чисел:
х, х+2, 5.6х+3, -3.
Вариант 5
Определить макрофункцию для вывода на экран одного целого числа и включить ее в состав программы так, чтобы ею могли воспользоваться и другие программы. Вывести на экран числа х, х-6, 5х, abs(-5).
Вариант 6
Определить и использовать в программе макрофункцию обнуление любого одномерного массива произвольной длины и включить ее в состав программы так, чтобы ею могли воспользоваться и другие программы.
Вариант 7
Напишите два фрагмента программы. Напишите программу main так, чтобы при выборе одной модели памяти выполнялся один фрагмент программы, а при другой - второй.
Оформить фрагменты программы так, чтобы ими могли воспользоваться и другие программы.
Вариант 8
Программа обрабатывает одномерный массив и должна вы-
полняться двояким образом:
если размер массива больше 10, то память для массива выделить динамически и к элементам массива обращаться через указатели;
если размер массива не больше 10, то память для массива выделить до начала выполнения программы и к элементам массива обращаться по имени.
Вариант 9
Программа обрабатывает матрицу и должна выполняться двояким образом:
если в программе есть константы, определяющие количество строк и столбцов, то память для матрицы выделить динамически и к элементам массива обращаться через указатели;
если хотя бы одной константы нет, память для массива
выделить до начала выполнения программы и к элементам массива обращаться по имени.
Вариант 10
Написать фрагмент программы, который можно включать в состав любой функции. В результате выполнения этого фрагмента должна выдаваться на экран следующая информация:
файл <полное имя файла> содержит <количество> строк и выполняется <дата> с использованием <имя модели памяти>. Каково местоположение фрагмента в функции?
