Обеспечение переносимости программы в исходных текстах на произвольную платформу

Страницы работы

Содержание работы

При реализации стандарта языка одной из главных задач была задача обеспечения переносимости программы в исходных текстах на произвольную платформу (любая система пр-ия, ОС).

Директивы – это собственные конструкции, которые управляют компиляцией. В системе пр-ия есть препроцессор, который включается в работу перед компилятором, обрабатывает все препроцессорные конструкции, превращает их в конструкции языка. . Признаком директивы является #. Они являются регистрочувствительными, т.е. пишутся маленькими буквами.

#define

#define <ид> [<текст>]

#define <ид> (список параметров) <текст>

заменяет <ид> на <текст> (если его нет, заменяет пробелом). За ид. может идти последовательность операторов языка, фрагмент будет вставлен и выполнена  #define FOR for (I=0;I<5;I++). Это макроопределение: #define sum (a,b) ((a)+(b)) – макрос, с=sum (5,6) – макровызов

#undef

отменяет действие #define – освобождает переменную для дальнейшего исп.

#include

#include “<полное имя файла>” – текущий каталог, каталог системы пр-ия – в строке Pas

#include <<полное имя файла>> - не ищет в рабочем каталоге, более слабая форма

#if, #elif, #else, #endif

#if          <константное выражение>

<текст>

[#elif     <константное выражение>

<текст>]

…..

[#else <текст>]

#endif

проверяется истинность (<>0) константного выражения. Если истина, то оставляем след. За if текст, а остальные стираются. Если ложь, проверяется следующее по порядку #elif. В контексте #if можно исп. #define. Если ид. был ранее определен, то получим истину

#if define (sum)

c=sum(5,6);

#else  c=5+6;

#endif

#ifdef, #ifndef

упрощенный вариант директив условной компиляции

#ifdef    <ид>

<текст>

[#elif     <константное выражение>

<текст>]

…..

[#else <текст>]

#endif

#line

#line <константное выражение> [“имя файла”]

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

#error

директива обработки ошибок. #error <текст>. Компиляция останавливается с выдачей сообщения <текст>

# - пустая директива

#pragma

#pragma <последовательность символов> - изменяет условие компиляции в процессе самой компиляции. <последовательность символов> управляет работой компилятора. Например, #pragma pack(2) – изменение выравнивания переменных на границу, =2

Похожие материалы

Информация о работе