C/C++ Урок 6. Директивы препроцессора
Мы уже сталкивались с одной директивой препроцессора в уроке 4. Сейчас мы обсудим, что такое.
До компиляция (т. е. превращение в машинные коды) вашей программы происходят некоторые действия - а именно сначала выполняются так называемые директивы препроцессора, а уже потом - непосредственно компиляция. Директивы препроцессора могут, например, включать в файл вашей программы другие файлы (это мы делаем с помощью директивы #include), определять некоторые константы (директива #define) и многое другое.
Важно понимать, что все директивы препроцессора выполняются до этапа компиляции. После выполнения директив препроцессора текст вашей программы будет изменен (не в исходном файле, конечно - там все как было, так и останется).
Перед любой директивой препрцессора пишется знак #.
Давайте немного приоткроем покров над тайной директив препроцессора на маленьком примере. Этот пример будет специфичен для Visual C++, но это не должно нас особенно тревожить - сейчас нам важно просто понять, как это все работает. Итак, создайте на Visual C++ новый проект для консольного приложения (для сего смотрите урок 1 в разделе по Visual C++ 6). Для файла *.cpp задайте имя test.cpp. В качестве текста программы введите
#include "test2.h"
#define pi 3.14
void main()
{
float z=2*pi;
}
Пока текст нас не слишком должен волновать. Если не все понимаете в тексте - не беда. Принцип здесь такой - #include влючает указанный файл в наш файл. У нас это файл test2.h. Создайте его (например в Блокноте) в той же папке, где находятся все остальные файлы вашего проекта. В нем напечатайте следующий текст (на самом деле можно напечатать все что угодно - это не принципиально):
struct v{
int x, y;
};
Еще одна директива препроцессора в нашей программе - это #define. Она просто пределяет константу pi, которую мы парой строчек ниже используем.
Теперь для просмотра того, что получается после выполнения директив препроцессора, измените настройки нашего проекта. Нажимайте Alt+F7 (или меню Project и далее Settings) и переходим на вкладку C/C++. В ней меняем содержимое окошка Project Options:
Из этого окошка все удалите, и напечатайте там
/MLd /Fo"Debug/" /P
Пока мы это обсуждать не будем, отметим только, что с такими параметрами вы получите в папке проекта файл с результатом работы препроцессора. Закройте окно настроек нажав на OK.
Компилируем программу (клавиша F7). В папке с файлами проекта появится файл test.i со следующим текстом:
#line 1 "D:\\_programming\\cpp\\test\\test.cpp"
#line 1 "D:\\_programming\\cpp\\test\\test2.h"
struct v{
int x, y;
};
#line 2 "D:\\_programming\\cpp\\test\\test.cpp"
void main()
{
float z=2*3.14;
}
Как вы видите, препроцессор поработал - вставил файл test2.h в наш файл и заменил pi на значение константы:
...
float z=2*3.14;
Так что работу препроцессера мы немного посмотрели.
|