2011-02-04 11 views
48

Używam biblioteki open source, która wydaje się mieć wiele dyrektyw dotyczących przetwarzania wstępnego, aby obsługiwać wiele języków innych niż C. Więc mogę się dowiedzieć, co robi biblioteka Chciałbym zobaczyć kod C, który kompiluję po preprocesorze, bardziej jak to, co bym napisał.Czy kod wyjściowy gcc C po przerobieniu?

Czy gcc (lub dowolne inne narzędzie powszechnie dostępne w Linuksie) czyta tę bibliotekę, ale wypisuje kod C, który ma przetwarzanie wstępne przekonwertowane na cokolwiek i jest również czytelne dla człowieka?

+0

Kod przetworzonych przyzwyczajenie się żadnych dyrektyw preprocesora, ale już jestem dość pewien, że będzie o wiele mniej czytelny niż przed preprocesowany ... –

+0

@AlexW - To zależy * całkowicie * od tego, jak strasznie ludzie piszący kod wykorzystali preprocesor. –

Odpowiedz

45

cpp to preprocesor.

Wykonaj operację cpp filename.c, aby wydrukować wstępnie przetworzony kod lub lepiej przekierować go do pliku za pomocą cpp filename.c > filename.preprocessed.

130

Tak. Przekaż mu opcję -E. Spowoduje to wydrukowanie wstępnie przetworzonego kodu źródłowego.

+7

Jeśli komendy kompilatora już mają parametr taki jak "-o something.o", możesz również chcieć zmienić go na '-o something.i'. W przeciwnym razie przetworzone dane wyjściowe znajdą się w pliku '.o'. –

+0

Przekaż tę flagę do 'gcc', co oznacza – user3282276

+0

@TorKlingberg Czy mogę to zrobić dla wielu plików jednocześnie? – user2808264

4

Używam gcc jako preprocesora (dla plików html.) Robi dokładnie to, co chcesz. Rozszerza dyrektywy "# -", a następnie wypuszcza czytelny plik. (BRAK innych preprocesorów C/HTML, które próbowałem to zrobić - łączą linie, dławią znaki specjalne itp.) Po zainstalowaniu gcc, wiersz polecenia brzmi:

gcc -E -xc -P -C -tradycyjny-cpp code_before.cpp> code_after.cpp

(Nie musi to być "cpp".) Istnieje doskonały opis tego zastosowania pod numerem http://www.cs.tut.fi/~jkorpela/html/cpre.html.

"-traditional-cpp" zachowuje białe spacje & tabulatory.

3

Run:

gcc -E <file>.c 

lub

g++ -E <file>.cpp