Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
91-100.docx
Скачиваний:
6
Добавлен:
11.09.2019
Размер:
33.32 Кб
Скачать

95Директивы #ifdef и #endif. Директива #undef. Директива #ifndef. Директивы #ifdef и #endif.

Директивы #ifdef и #endif -условные директивы препроцессора. Их можно использовать для выборочного включения в программу некоторых операторов. Директива #endif применяется со всеми условными командами препроцессора и означает конец условного блока. Например, если ранее было определено имя LARGE_CLASSES, то в следующем фрагменте программы описывается новое имя MAX_SEATS:

#ifdef LARGE_CLASSES

#define MAX_SEATS 100

#endif

Директива #undef.

Директива #undef сообщает препроцессору об отмене всех предыдущих определений для указанного идентификатора.

#ifdef LARGE_CLASSES

#undef MAX_SEATS 30

#define MAX_SEATS 100

#endif

Директива #undef отменяет самое последнее определение поименованного макроопределения.

Директива #ifndef.

По команде #ifndef препроцессор определяет отсутствие указанного идентификатора и выполняет некоторые действия. Следующий фрагмент кода взят непосредственно из файла stdio.h:

#ifndef _SIZE_T_DEFINED

typedef unsigned int size_t;

#define _SIZE_T_DEFINED

#endif

  1. Директива #if. Директива #else. Директива #elif.

Директива #if.

В директиве #if также присутствует лексема defined.

при помощи директивы #if и конструкции defined выполняются те же действия, которые требовали вложенных директив #ifndef и #ifdef:

#if defined(LARGE_CLASSES) && !defined (PRIVATE_LESSONS)

#define MAX_SEATS 30

#endif

#ifdef LARGE_CLASSES

#ifndef PRIVATE_LESSONS

#define MAX_SEATS 30

#endif

Директива #else.

#else, обеспечивает одинаковый размер целых чисел в обеих системах:

#ifdef VAX_SYSTEM

#define INTEGER short int

#else

#define INTEGER int

#endif

Директива #elif.

Директива #elif является сокращением от "else if"; она используется как альтернативный вариант при построении вложенных операторов #if. При помощи следующих операторов определяется какой размер класса определен и однозначно задается макрос:

#if defined (LARGE_CLASSES)

#define BILL printf("\nCost per student $100.00.\n")

#elif defined (PRIVATE_LESSONS)

#define BILL printf ("\nYour tuition is $1000.00.\n")

#else

#define BILL printf("\nCost per student $150.00.\n")

#endif

97Директива #line. Директива #error. Директива #pragma. Условная компиляция. Директива #line.

Директива #line отменяет автоматическую нумерацию строк, выполняемую компилятором; она может помочь при отладке программы.

Если же включить директиву #Iine в начало только что добавленной процедуры, то компилятор выдаст номер ошибочной строки относительно начала функции

код определяет, что счетчик строк будет начинаться с 100, а оператор printf() выводит номер 102, потому что он расположен в третьей строке программы после оператора #line 100:

#include <stdio.h>

#line 100

int main(void)

{

printf("%d\n",__LINE__);

return 0;

}

Директива #error.

сновном для отладки. В общем виде директива #error выглядит таким образом:

#еrrоr сообщение-об-ошибке

сообщение-об-ошибке в двойные кавычки не заключается. Когда встречается директива #error, то выводится сообщение об ошибке — возможно, вместе с другой информацией, определяемой компилятором.

Директива #pragma.

Директива #pragma — это определяемая реализацией директива, которая позволяет передавать компилятору различные инструкции. Например, компилятор может поддерживать трассировку выполнения программы. Тогда возможность трассировки можно указывать в операторе #pragma. Возможности этой директивы и относящиеся к ней подробности должны быть описаны в документации по компилятору.

Условная компиляция.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]