Учись программированию на C++ Builder бесплатно!

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

В компиляторе gcc (он же mingw под windows) есть опция -E, которая печатает в терминале результат работы препроцессора и завершает компиляцию, т.е. код формироваться не будет. Если выдача оказывается слишком большой, то её можно перенаправить в файл через ">" в командной строке, либо подать опцию "-o <file>" в запуск gcc:

$ gcc a.c -E
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
int x = 10;

Посмотреть список файлов, подключенных через директиву #include, можно по опции -H. В этом случае компиляция не останавливается:

#include <stdio.h>
$ gcc a.c -H
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/sys/cdefs.h
.... /usr/include/bits/wordsize.h
... /usr/include/gnu/stubs.h
.... /usr/include/bits/wordsize.h
.... /usr/include/gnu/stubs-32.h
.. /usr/lib/gcc/i486-linux-gnu/4.2.4/include/stddef.h
.. /usr/include/bits/types.h
... /usr/include/bits/wordsize.h
... /usr/include/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/i486-linux-gnu/4.2.4/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/i486-linux-gnu/4.2.4/include/stdarg.h
.. /usr/include/bits/stdio_lim.h
.. /usr/include/bits/sys_errlist.h
Multiple include guards may be useful for:
/usr/include/bits/stdio_lim.h
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o: In function '_start':
(.text+0x18): undefined reference to 'main'
collect2: ld returned 1 exit status

В C++ Builder 2007 на файле в списке исходников можно нажать правую кнопку и далее выбрать "Preprocess". Через несколько секунд, в списке исходников появится ещё один файл с расширением .i - это и есть препроцессированный текст.

Поделиться