2012-06-11 5 views
1

Я хочу написать программу на C для реализации функции препроцессора include.реализация включить препроцессор в c

Пример:

В header.h У меня этот код:

char *test (void); 

И program.c:

int x; 
#include "header.h" 
int 
main (void) 
{ 
    puts (test()); 
} 

вход является program.c.

Выход должен быть:

int x; 
char *test (void); 
int 
main (void) 
{ 
    puts (test()); 
} 

Как я могу это сделать?

+0

где вы определили test()? – nischayn22

+0

в header.h Я определил test(). – AComputer

+1

Должно быть довольно просто реализовать минимальный препроцессор. Если вам интересно, вы можете посмотреть на что-то вроде [mcpp] (http://mcpp.sourceforge.net) на Sourceforge или [Gnu cpplib] (http://gcc.gnu.org/projects/cpplib.html) – paulsm4

ответ

0

Вам нужно будет прочитать входной файл по строкам. Проверьте, начинается ли строка с #include (с необязательным ведущим пробелом). Если нет, распечатайте строку, которую вы прочли. Если это так, откройте указанный файл и запустите на нем тот же алгоритм (для обработки вторичных #includes).

+0

как я могу это сделать? – AComputer

+0

@AComputert Открыть файл, прочитать его по строкам, отслеживать комментарии и строки, чтобы вы не пытались обработать оператор 'printf (" # include \ n ");' или комментарий '/ * #include */'. Или прочитайте все это в памяти и просмотрите это; или используйте 'mmap()', чтобы сделать его доступным в памяти. Или ... –

+0

Также подумайте о рекурсии. –

0

вы можете запустить gcc -E «ваши исходные файлы», а затем отфильтровать строку, включенную «#», слева - ваш желаемый, а макросы заменяются его реальными формами.

, например:

gcc -E hello.c|sed '/# .,$/d' > a.c 

a.c ваш разыскиваемый файл.

0

при использовании GCC
НКУ -E -P program.c

или
каст -P program.c

при использовании Visual C
кл/EP программа. c

Смежные вопросы