Директива #undef

Строку замещения, связанную с препроцессорным идентификатором, можно заменить, приписав уже определённому идентификатору новое значение другой командой #define. Перед новым определением идентификатора рекомендуется отменить старое значение с помощью команды препроцессора

#undef идентификатор.

Например,

/* Здесь three не определено */

#define three 3

/* Здесь three определено как число 3*/

#undef three

/* Здесь three снова не определено */

#define three 33

/* Здесь three определено с другим значением, как число 33*/

Эту команду можно использовать не только для изменения значений макроса, а просто для отмены действия макроса, то есть для локализации имён макросов в тех частях программы, где они необходимы. Если в приведенном выше примере директиву

#define three 33

не написать, то макрос three будет локализован только от директивы #define three 3 до директивы #undef three.

§2. Директива # include (включение файлов).

Команда используется для включения текста из другого файла и может иметь следующие три формы записи:

#include <имя_файла>

#include “имя_файла”

#include имя

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

заголовки (прототипы) функций. Рекомендуется таким файлам приписывать расширение .h;

определение одной или нескольких функций (тексты функций);

любая, желательно логически завершённая часть программы, не оформленная в виде функции;

объявления констант, типов (например, структур, объединений, перечислений и др.), переменных;

любые директивы препроцессора, в том числе и #define. В таком случае говорят о вложенных подключениях файлов;

Если имя_файла записано в угловых скобках, то препроцессор разыскивает файл в стандартных системных каталогах, предназначенных для хранения заголовочных файлов. Если имя_файла заключено в кавычки, то вначале препроцессор просматривает текущий каталог пользователя. И только если файл не найден там, то поиск продолжается в стандартных системных каталогах.

С помощью рассматриваемой команды можно исходный текст программы разместить не в одном файле, как мы это делали раньше, а в нескольких. Рассмотрим это на примере.

Пример. Условие задачи для вычисления определённого интеграла смотри в §3 главы 7. Для сравнения ту же задачу решим, подготовив и сохранив в одной и той же папке, например, D:\\ANA\\cpp\\includе\\Integral, следующие четыре файла с текстом программы:

1) Файл MyInclude.cpp содержит подключение стандартных заголовочных файлов, которые используются в большинстве приложений:

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

2) В файле Prototip.h размещаем прототип функции Integral:

float Integral(float, float, float, float (*Fun)(float));

В одном файле можно разместить прототипы нескольких функций.

3) В файле Integral.cpp будет находиться текст функции, которая реализует формулу Симпсона для вычисления определённого интеграла от произвольной функции.

float Integral (float a, float b, float n, float (*Fun)(float))

{ float h,s1=0,s2=0;

h=(b-a)/n;

for(int i=2;i<=(n-2);i+=2)

s1+=(*Fun)(a+i*h);

for(int i=1;i<=(n-1);i+=2)

s2+=(*Fun)(a+i*h);

return ((b-a)/(3*n)*((*Fun)(a)+2*s1+4*s2+(*Fun)(b)));

}

4) В файле MetodSimpsona.cpp подключаем описанные выше файлы, размещаем головную функцию main, в которой вызываем функцию Integral и текст конкретной функции, для которой будем вычислять определённый интеграл

#include "D:\\ANA\\cpp\\includ\\Integral\\MyInclude.cpp"

#include "D:\\ANA\\cpp\\includ\\Integral\\Prototip.h"

float Function(float);

void main()

{ float a,b,n,I; a=-1; b=1; n=100;

I=Integral(a,b,n,Function);

cout<<I;

getch(); }

#include "Integral.cpp"

float Function(float x)

{

return (x*x*sqrt(1-x*x)); }

Для выполнения программы открываем файл MetodSimpsona.cpp, обычным образом компилируем его и выполняем. Команды #include “соберут” все части программы вместе. Для вычисления определённого интеграла от другой функции достаточно внести небольшие изменения в файл MetodSimpsona.cpp, например, изменить алгоритм вычисления подинтегральной функции и (или) пределы интегрирования и (или) точность (n).

§3. Директивы условной компиляции.

Существует несколько директив, которые в зависимости от условия включают или не включают строки в текст программы для дальнейшей её компиляции. Этот процесс называется условной компиляцией и используется для подготовки различных версий одной и той же программы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: