- •91.Совместимость типов. Перечисляемые типы. Типы массивов. Типы функций. Типы структур и объединений. Типы указателей. Совместимость нескольких исходных файлов.
- •92.Макроопределения. Определение макросов. Макросы и параметры. Сложности при раскрытии макросов.
- •93Макросы, поставляемые вместе с компилятором. Выбор макроопределения или функции. Макросы, поставляемые вместе с компилятором.
- •Выбор макроопределения или функции.
- •95Директивы #ifdef и #endif. Директива #undef. Директива #ifndef. Директивы #ifdef и #endif.
- •Директива #if. Директива #else. Директива #elif.
- •97Директива #line. Директива #error. Директива #pragma. Условная компиляция. Директива #line.
- •Дополнительные операции препроцессора. Операция подстановки строки (#). Операция конкатенации (##).
- •Операция конкатенации (##).
- •99Дополнительные операции препроцессора. Операция подстановки символа (#@). Обработка ошибок: perror(). Операция подстановки символа (#@).
- •Обработка ошибок: perror().
- •100Модели памяти. Модель tiny. Модель small. Модель medium. Модель compact. Модель large. Модель huge.
93Макросы, поставляемые вместе с компилятором. Выбор макроопределения или функции. Макросы, поставляемые вместе с компилятором.
Комитет ANSI С рекомендовал, чтобы во всех компиляторах С были описаны пять специальных макросов без параметров. Название каждого макроса начинается и заканчивается двумя символами подчеркивания; это показано в следующей таблице:
-
Имя макроса
Значение
_LINE_
Десятичная целая константа, представляющая собой текущий номер строки исходного текста
_FILE_
Строковая константа, являющаяся именем текущего исходного файла
_DATE_
Строковая константа, представляющая собой дату трансляции в виде Mmm dd yyyy (месяц день год)
_TIMESTAMP_
Строковая константа, представляющая собой дату и время последней модификации исходного файла в виде Ddd Mmm hh:mm:ss уууу (день месяц часы:минуты:секунды год)
_STDC_
Равняется единице, если компилятор совместим с ANSI С
Выбор макроопределения или функции.
Многие задачи можно решать, используя макроопределение с аргументами или функцию.
Выбор макроопределения приводит к увеличению объема памяти, а выбор функции — к увеличению времени работы программы.
Преимущество макроопределений заключается в том, что при их использовании вам не нужно беспокоиться о типах переменных
Директива #include. Заголовочные файлы. Правильное использование заголовочных файлов. Более эффективное использование заголовочных файлов. Предварительная компиляция заголовочных файлов.
Директива #include.
Когда препроцессор «распознает» директиву #include, он ищет следующее за ней имя файла и включает его в текущий файл. Директива выдается в двух видах:
#include <stdio.h> имя файла в угловых скобках
#include "mystuff.h" имя файла в двойных кавычках
В типичной микропроцессорной системе эти две формы являются синонимами, и препроцессор ведет поиск на указанном диске.
Суффикс .h используется для «заголовочных» файлов. Заголовочные файлы обычно состоят из операторов препроцессора. Некоторые файлы, подобно stdio.h, включены в систему.
Заголовочный файл - файл содержащий определения типов данных, структуры, прототипы функций, перечисления, макросы препроцессора. Имеет по умолчанию расширение .h. Заголовочный файл используется путём включения его текста в данный файл директивой препроцессора #include. Основная цель использования заголовочных файлов — вынесение описания нестандартных типов и функций за пределы основного файла с кодом.
Правильное использование заголовочных файлов.
использование заголовочных файлов гарантируется, что все файлы содержат одни и те же объявления, если некоторое объявление нужно обновить, то необходимо сделать только одну замену в заголовочном файле. Часто в заголовочные файлы входят следующие компоненты:
Директивы препроцессора
Объявления констант const
Прототипы функций
Определения typedef
Определения структур
Перечисляемые типы
Внешние ссылки extern
заголовочный файл никогда не должен содержать нестатических определений.