Позвоните cpp
напрямую, например
$ cat >foo.c <<EOF
#define FOO
#ifdef FOO
foo is defined
#else
foo is not defined
#endif
EOF
$ cpp foo.c
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.c"
foo is defined
Конечно, если вы включите какие-либо заголовки, они будут включены в вывод. Одним из способов избежать этого может быть просто grep -v
из строк с #include
с (или, возможно, только с #include <
и разрешением #include "
). Или вы можете указать опцию -nostdinc
, чтобы удалить только стандартные включения (но, возможно, оставить в локальных библиотеках, если вы не укажете пути включения, чтобы они не были найдены) - это предупредит об отсутствии заголовков.
Редактировать: Или использовать сам препроцессор, чтобы сделать включение заголовков условным, обернуть их во что-то вроде #ifndef TESTING_PREPROCESSOR
и использовать -DTESTING_PREPROCESSOR
.