11.9  Использование утилиты препроцессора cpp32.exe

Утилита Cpp32. exe  создает файл, в котором все #include файлы и #define макросы будут расширены. Часто нет необходимости просматривать результаты работы препроцессора, однако в целях отладки такой просмотр может оказаться полезным.

Примечание: Найти утилиты Cpp32.exe можно в среде CBuilder ver.6:

Cpp32.exe -> c:Program FilesBorlandCBuilder6Bin

Cpp32.txt  -> c:Program FilesBorlandCBuilder6ExamplesWinTools

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

Препроцессор может работать из командной строки. Каждый выходной файл, полученный с помощью программы Сpp32.exe имеет такое же имя, как и входной, но с расширением .i. Он расположен в текущем каталоге.

Этот выходной файл является текстовым и содержит каждую строку исходного или включаемого файла. Любые директивы исходного файла удаляются вместе с блоками «Нет» условных директив.  Каждая строка текста будет содержать имя файла и номер строки из этого файла. Любой макрос будет заменен текстом расширения.

Выходной файл Cрр32 не может компилироваться из-за наличия имени файла и номера строки, сопровождающей каждое предложение кода, тем не менее, использование опции  -P- даст возможность создать файл без нумерации строк. В этом случае выходной файл Срр32  можно компилировать.

Утилита Cрр32.exe имеет следующий формат:

Cрр32 [ options ] file[s]

Приведем некоторые опции Cрр32:

· Ax  

 – специфицирует язык расширений;

· C

 – разрешает вложенные комментарии;

· Dname

 – определяет макро;

· gnnn

 – остановка после N предупреждений;

· innn

 – максимальная длина идентификатора;

· Ipath

 – путь к каталогу включаемых файлов;

· jnnn

 – остановка после N ошибок;

· npath

 – путь к каталогу выходного файла;

· ofilename

 – имя выходного файла.

Чтобы просмотреть полный список опций нужно запустить препроцессор с опцией –h (cpp32.exe  –h).

Пример

Дан следующий исходный код, записанный в файле ZADACHA6.CPP:

# include <iostream.h>

# include <stdio.h>

# include <conio.h>

# define MAXTITL 40

# define MAXAUTL 30

# define MAXBKS 3

struct book

{

char title [MAXTITL];

char author [MAXAUTL];

float value;

};

int main (void)

{

book libry [MAXBKS];

clrscr ();

int count=0;

int index;

printf (" Введите название книгиn");

while (count<MAXBKS&&

gets(libry[count].title)!=NULL

&&libry [count].title[0]!=’’)

{

printf("Введите фамилию автораn");

gets (libry [count].author);

 printf ("Введите стоимостьn");

cin >> libry[count++].value;

}

printf ("Список ваших книгn");

for (index=0; index<count;index++)

printf ("n %s %s %f",libry[index].title,

libry[index].author,libry[index].value);

return 0;

}

Выполним препроцессорную обработку кода утилитой CPP32.ехе из командной строки:

c:Documents and SettingsПетров ЮА>h:cpp32.exe –Ic:Program FilesMicrosoft Visual StudioVC98Include  c:Program FilesMicrosoft Visual StudioVC98binZADACHA6.cpp -oZADACHA6.I

При выполнении утилиты cpp32.exe из командной строки использованы следующие ключи:

· I – каталог Include, в котором описаны используемые директивы;

· o – имя выходного файла в текущем каталоге (Documents and Settings).

В целях экономии выходной файл ZADACHA6.I не напечатан.