Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

2.7.1.Включение файла.

Различные объектные модули могут объединяться с помощью редактора связи. Препроцессорная директива имеет вид:

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

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

Директива #include заменяется в тексте программы содержимым файла с заданным именем. Если заключена в <>, то искать файл в стандартном каталоге системы.

Понятие текущего и стандартного каталога, а также действия в случае не обнаружения файла определяются реализацией. Как правило, если файл не найден, то поиск продолжается в стандартных каталогах. Допускаются вложенные директивы #include.

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

#include<stdio.h>

#include”stdio.h”

Подключаемые файлы также могут иметь директивы #include. Если это имеет место, то говорят о вложенных подключениях.

Пример: данная программа подключает файл, который в свою очередь подключает др. файл.

/* файл программы*/

#include<stdio.h>

int main(void)

{

#include “one”

return 0;

}

/*подключение файла one/

printf(“это от 1-ого подключения файла \n”);

#include”two”

/*подключаемый файл two/

printf(“это от 2-ого подключаемого файла \n”);

2.7.2.Макроподстановка.

2.7.2.1.Простая.

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

Формат простой макроподстановки

#define идентификатор последовательность символов, где идентификатор строится по правилам образования идентификатора в языке Си.

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

Пример:#define NULL 0

Идентификаторы, которые появляются в макроподстановке, рекомендуется записывать прописными буквами для того, чтобы указать, что они являются символическими константами.

Пример. См. выше

if(p= =NULL)

a=b;

printf(“\n NULL”);

Из приведенных 3 операторов только в первом процессор сделает подстановку, так как aNULL не является символической константой, а запись \n NULL не доступна для препроцессора. В качестве строки, используемые в директиве #define может указываться любая конструкция, допустимая в Си. Строка размещается в директиве #define после второго пробела. Первый пробел указывается после директивы #define. Если за последним не пробельным символом в строке указывается \ это означает, что строка имеет продолжение на следующей линии.

Пример.

#define STR((a>b||c>b)&&)

((d%f)= =0))

main()

{ int a,b,c,d,f;

if(str)

оператор;

……..

}

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

Пример:

#define MAX_SIZE 100

/*……..*/

float balance[MAX_SIZE];

/*…….*/

float temp[MAX_SIZE];

Для изменения размеров обоих массивов необходимо изменить определение MAX_SIZE.