Załóżmy, że mam plik źródłowy z wieloma dyrektywami preprocesora. Czy można zobaczyć, jak to wygląda po zakończeniu pracy preprocesora?
206
Załóżmy, że mam plik źródłowy z wieloma dyrektywami preprocesora. Czy można zobaczyć, jak to wygląda po zakończeniu pracy preprocesora?
Odpowiedzi:
cl.exe
, interfejs wiersza polecenia do Microsoft Visual C ++, ma trzy różne opcje wyprowadzania wstępnie przetworzonego pliku (stąd niespójność w poprzednich odpowiedziach na temat Visual C ++):/E
: proces wstępny do standardowego wyjścia (podobny do opcji -E GCC)/P
: proces wstępny do pliku/EP
: przetwarzanie wstępne na standardowe wyjście bez dyrektyw #lineJeśli chcesz wstępnie przetworzyć plik bez dyrektyw #line, połącz opcje
/P
i/EP
.źródło
/P
spowoduje to wyłączenie generowania plików obj. Więc jeśli umieścisz/P
opcje, możesz otrzymać błąd łącza informujący, że nie można znaleźć niektórych plików obj, ponieważ w rzeczywistości nie jest generowany.VS Developer command prompt
a NIE w,Command prompt
gdy próbujesz użyć MS kompilatora (cl
). Kompilator nie jest dostępny w konwencjonalnym wierszu poleceń.Większość kompilatorów ma opcję uruchomienia preprocesora. np. gcc zapewnia -E:
Możesz więc po prostu uruchomić:
Jeśli nie możesz znaleźć takiej opcji, możesz po prostu znaleźć preprocesor C na swoim komputerze. Zwykle nazywa się to cpp i prawdopodobnie jest już na twojej ścieżce. Wywołaj to w ten sposób:
Jeśli istnieją nagłówki, które musisz dołączyć z innych katalogów, możesz przekazać -I / path / to / include / dir do każdego z nich, tak jak w przypadku zwykłej kompilacji.
W przypadku systemu Windows pozostawię to innym plakatom, aby udzielili odpowiedzi, ponieważ nie jestem tam ekspertem.
źródło
Kliknij prawym przyciskiem myszy plik w Eksploratorze rozwiązań, przejdź do Właściwości. W obszarze Właściwości konfiguracji -> C / C ++ -> Preprocesor, „Generuj wstępnie przetworzony plik” jest tym, czego szukasz. Następnie kliknij prawym przyciskiem myszy plik w Eksploratorze rozwiązań i wybierz „Kompiluj”. Wstępnie przetworzony plik jest tworzony w katalogu wyjściowym (np. Release, Debug) z rozszerzeniem .i (dzięki Steedowi za jego komentarz).
źródło
Release
,Debug
) z rozszerzeniem.i
.Zwykle musisz wykonać przetwarzanie końcowe na wyjściu preprocesora, w przeciwnym razie wszystkie makra rozwijają się do jednego wkładki, co jest trudne do odczytania i debugowania. W przypadku kodu C wystarczy coś takiego:
W przypadku kodu C ++ jest to o wiele trudniejsze. W przypadku GCC / g ++ ten skrypt Perla był przydatny.
źródło
Nic nie wiem o kompilatorze Microsoft, ale w GCC możesz użyć tego:
Jeśli chcesz zobaczyć komentarze, użyj tego:
Więcej opcji dostępnych na tej stronie .
źródło
Spróbuj,
cl /EP
jeśli używasz kompilatora C ++ firmy Microsoft.źródło
W Visual Studio możesz skompilować plik (lub projekt) za pomocą / P.
źródło
Jak odpowiedzieli bk1e i Andreas M., opcja / P kompilatora spowoduje wstępne przetworzenie pliku. Jednak w moim projekcie wykorzystującym VS2005 i platformę Builder (dla wbudowanego procesora ARM) projekt nie przedstawił opcji w oknie dialogowym (zgodnie z opisem Jima B), aby włączyć tę opcję.
Mogłem uruchomić CL ręcznie i dodać / P, ale to się nie udało, ponieważ nie znałem wszystkich odpowiednich opcji wiersza poleceń, które były niewidocznie aktywowane przez Konstruktora platform podczas pełnej kompilacji. Musiałem więc poznać wszystkie te opcje.
Moje rozwiązanie polegało na przejrzeniu pliku build.log i znalezieniu wykonanej linii
CL blah-blah-blah myfile.c
Skopiowałem tę linię do schowka. Część „bla-bla-bla” zawierała opcje budowy i była ogromna.
Z powrotem w IDE, kliknąłem prawym przyciskiem myszy na myfile.c, wybrałem „Otwórz okno kompilacji”, a następnie w tym oknie wkleiłem linię komend kompilacji i dodałem „/ P”.
CL /P blah-blah-blah myfile.c
Gotowe. Plik myfile.i został utworzony i zawierał dane wyjściowe preprocesora.
źródło
CPIP to nowy preprocesor C / C ++ napisany w języku Python. Jeśli chcesz uzyskać szczegółową reprezentację wizualną wstępnie przetworzonego pliku, wypróbuj go.
źródło
W systemie operacyjnym Windows prostą odpowiedzią na to pytanie w jednym wierszu jest użycie poniższego polecenia w wierszu polecenia DOS, aby wyświetlić wstępnie przetworzony plik:
Spowoduje to wygenerowanie pliku o nazwie myprogram.i . Otwórz i wypatruj rozszerzonych preprocesorów.
źródło