Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование).docx
Скачиваний:
32
Добавлен:
28.10.2018
Размер:
52.68 Кб
Скачать

6)Поля битов. Средство typedef-

Поле битов – несколько переменных , хранящихся рядом внутри одного машинного слова . Синтаксис описания в поле битов и доступа к ним базируется на синтаксисе структурном .

Struct {unsigned int a:1;

Unsigned int b:1;

Unsigned int c:2;

}flags

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

Язык Си предоставляет программисту возможность помимо встроенных типов данных самому заводить новые типы данных подходящие для конкретных задач. Кроме того в языке существует возможность переименовывать любой тип данных , как встроенный , так и определенный программистом . Именно для этой цели служат средства typedef.

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

Например у нас имеется массив[100] , указав тип double мы выделили память под каждый элемент этого массива , а используя typedef мы экономим память и выделяем тип как под одно целое .

typedef double DArray[100];  

...  

DArray A, B, C;   

7) Понятие макроподстановки .

Понятие макроподстановки – имеет вид : #define_имя_заменяющий текст.

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

#define PI 3.14

Void main()

{printf (“%f\n”,PI);

}

Обычно заменяющий текст находится в строке , в которой расположено слово #define , но в длинных определениях его можно продолжить на следующих строчках , поставив в конце каждой продолжаемой строки «\»

#define matr for (i=1;i<=n;i++)\

For (j=1;j<=m;j++)

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

#define max(A,b) ((A>(B)?(A):(B))

Хотя обращение к max выглядит , как обычное к функции оно будет вызывать только текст значений каждый формальный параметр будет заменяться соответствующим аргументом . так строка x=max(a+b,c+d) будет заменена на строку x=((a+b)>(c+d)?(a+b):(c+d)).

То , что было в define можно скрыть от предпроцессора с помощью директивы undef_имя. Как правило это делается , чтобы перекрыть макроопределение настройки функции с этим именем .

#define vasia A

Void main ()

{int vasia;

#undef vasia

Vasia ()

}

Vasia (){….}

8) Включение файлов .

Директива #include предписывает компилятору поместить на ее место содержимое другого файла . Обычно эта директива применяется в так называемом включенном или заголовочном файле *.h . Однако существует возможность включить в текст программы любой другой исходный файл .

#include <имя файла> или #include “имя файла”. Если имя файла не является полным именем , то в первом случае поиск происходит только в пределах специфицированных каталогах включаемых файлов . При использовании кавычек сначала просматривается текущий каталог , а затем каталоги , включающих файлов .