Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб по С и С++ / ЛАБ_С_№10.doc
Скачиваний:
69
Добавлен:
17.03.2015
Размер:
60.42 Кб
Скачать

Void main(void)

{

printf("\nимя текущего файла %s",__FILE__);

printf("\nномер текущей строки в исходном файле %d",__LINE__); printf("\nдата начала обработки препроцессором %s",__DATE__); printf("\nвремя начала обработки препроцессором %s",__TIME__);

}

Отмена макроопределения

Директива #undef отменяет самое последнее макроопределение. Повторное определение константы ведет к переопределению, при компиляции машина предупредит вас о переопределении, как о возможной ошибке. Возможно применение директивы #undef к несуществующей константе.

Пример 5.

#define BIG 3

#define HUGE 3

#undef BIG /* BIG не определена */

#define HUGE 10 /* HUGE переопределена */

#undef HUGE /* HUGE равна 3 */

ВКЛЮЧАЮЩИЕ ДИРЕКТИВЫ

По директиве #include текст указанного (заголовочного) файла включается в текст программы.

Чаще всего директива #include пишется в начале программы, а заголовочный файл содержит директивы #define, возможно, директивы #include, объявления структур и внешних переменных.

Заголовочный файл может содержать и определение какой-либо функции, а по директиве #include текст этой функции будет включен в вашу программу.

Однако, включающая директива может встретиться и в любом месте функции - в этом случае заголовочный файл содержит какой-либо фрагмент программы.

Заголовочные файлы могут быть системные и пользовательские.

Пример 6.

#include <stdio.h> /* включение системного файла */

#include "myfile.h" /*включение пользовательского файла из текущего каталога и */

#include "c:\user \ my.h" /* с указанием пути поиска */

Пример 7.

/* текст программы до обработки препроцессором */ #include<stdio.h>

Void main(void)

{

#include"my1.h"

}

/* содержимое файла my1.h */

printf("hello!\n");

/* текст программы после обработки препроцессором */

/* содержимое файла stdio.h */

Void main(void)

{

printf("hello!\n");

}

/* ДИРЕКТИВЫ УСЛОВНОГО ВКЛЮЧЕНИЯ

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

Синтаксис:

#ifdef идентификатор /* если идентификатор определен */

текст1/* в текст программы включается текст1*/

#else /* иначе (идентификатор не определен) */

текст2 /* в текст программы включается текст2*/

#endif /* конец области действия директивы */

#ifndef идентификатор /* если идентификатор не определен */

текст1 /* в текст программы включается текст1*/

#else /* иначе (идентификатор определен) */

текст2 /* в текст программы включается текст2*/

#endif /* конец области действия директивы */

#if выражение1 /* если выражение1 истинно */

текст1 /* включается текст1 */

#elif выражение2 /* если выражение1 ложно, но выражение2*/

текст2 /* истинно включается текст2 */

#else /* иначе - включается текст3 */

текст3

#endif

/*Ветви #else и #elif могут отсутствовать. Выражения должны быть целыми и постоянными (используются целые символические

и обычные константы и логические операции).

В составе #if может использоваться defined(имя_макро), опре­деляющий, является ли имя именем макро.

Например: if defined(A) || defined(B) - если определена A или определена B.

Пример 8.

/*программа работает в двух режимах-отладочном и рабочем текст программы до обработки препроц. */

#define TRACE

#include<stdio.h>

void getline(void);

Соседние файлы в папке Лаб по С и С++