Как я могу увидеть исходный файл C / C ++ после предварительной обработки в Visual Studio?
Предположим, у меня есть исходный файл со многими предпроцессорными директивами. Можно ли посмотреть, как он выглядит после того, как препроцессор с этим справляется?
- Почему я не могу редактировать метод, содержащий анонимный метод в отладчике?
- R строк строки сценария при ошибке?
- Как я могу узнать, что делает мой запрос на активные запросы?
- Отладка службы Windows
- Как добавить NSDebug.h и использовать NSZombie в iPhone SDK
- Как найти, где исключение было выбрано на C ++?
- Как определить, было ли приложение .NET скомпилировано в режиме DEBUG или RELEASE?
- Как я могу сделать что-то, что ловит все «необработанные» исключения в приложении WinForms?
cl.exe
, интерфейс командной строки для Microsoft Visual C ++, имеет три различных варианта вывода предварительно обработанного файла (отсюда и несогласованность предыдущих ответов о Visual C ++):
-
/E
: препроцесс на stdout (аналогично опции -GCC -E) -
/P
: препроцесс в файл -
/EP
: предварительный процесс для stdout без директив #line
Если вы хотите предварительно обработать файл без директив #line, объедините параметры /P
и /EP
.
Большинство компиляторов имеют возможность запускать препроцессор. например , gcc обеспечивает -E:
-E Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output.
Таким образом, вы можете просто запустить:
gcc -E foo.c
Если вы не можете найти такой вариант, вы также можете просто найти препроцессор C на своем компьютере. Обычно он называется cpp и, вероятно, уже находится на вашем пути. Вызвать это так:
cpp foo.c
Если есть заголовки, которые вам нужно включить из других каталогов, вы можете передать -I / path / to / include / dir в любой из них, как и с обычной компиляцией.
Для Windows я останусь на других плакатах, чтобы предоставить ответы, поскольку я не эксперт.
Щелкните правой кнопкой мыши файл в обозревателе решений, перейдите в «Свойства». В разделе «Свойства конфигурации» -> C / C ++ -> Препроцессор, «Генерировать предварительно обработанный файл» – это то, что вы ищете. Затем щелкните правой кнопкой мыши файл в обозревателе решений и выберите «Скомпилировать». Предварительно обработанный файл создается в выходном каталоге (например, Release, Debug) с расширением .i (спасибо Steed за его комментарий).
Обычно вам нужно выполнить некоторую постобработку на выходе препроцессора, иначе все macros просто расширятся до одного лайнера, который трудно читать и отлаживать. Для кода C достаточно следующего:
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-xc
Для кода на C ++ это намного сложнее. Для GCC / g ++ я нашел этот скрипт Perl полезным.
Я ничего не знаю о компиляторе Microsoft, но в GCC вы можете использовать это:
gcc -E -P -o result.c my_file.h
Если вы хотите увидеть комментарии, используйте это:
gcc -E -C -P -o result.c my_file.h
На этой странице доступно больше вариантов.
Попробуйте cl /EP
если вы используете компилятор Microsoft C ++.
В Visual Studio вы можете скомпилировать файл (или проект) с помощью / P.
Как ответили bk1e и Andreas M., параметр / P для компилятора заставит его предварительно обработать файл. Однако в моем проекте, использующем VS2005 и Platform Builder (для встроенного процессора ARM), проект не предоставил параметр в диалоговом окне (как описано Джим Б), чтобы включить этот параметр.
Я мог запустить CL вручную и добавить / P, но это не удалось, потому что я не знал всех подходящих параметров командной строки, которые невидимо активировались Platform Builder во время полной сборки. Поэтому мне нужно было знать все эти варианты.
Мое решение состояло в том, чтобы заглянуть в файл build.log и найти строку, которая выполнена
CL blah-blah-blah myfile.c
Я скопировал эту строку в буфер обмена. Часть «бла-бла-бла» содержала варианты сборки и была огромной.
Вернувшись в среду IDE, я щелкнул правой кнопкой мыши по файлу myfile.c, выбрал «Open Build Window», а затем в этом окне я вставил строку сборки и добавил «/ P».
CL /P blah-blah-blah myfile.c
Готово. Был создан файл myfile.i, который содержал вывод препроцессора.
CPIP – это новый препроцессор C / C ++, написанный на Python. Если вы хотите получить подробное визуальное представление предварительно обработанного файла, сделайте снимок.
CPIP – это предварительный процессор C / C ++, реализованный в Python. Большинство предварительных процессоров рассматривают предварительную обработку как грязную работу, которая должна быть сделана как можно скорее. Это может затруднить отслеживание тонких дефектов на этапе предварительной обработки, поскольку предварительные процессоры отбрасывают много полезной информации в пользу получения результата как можно дешевле.
Немногие разработчики действительно понимают предварительную обработку, для многих это неясный бит черной магии. CPIP стремится улучшить это и, записывая каждую деталь предварительной обработки, поэтому CPIP может создавать замечательную визуальную информацию о зависимостях файлов, использовании макросов и т. Д.
CPIP не предназначен для замены cpp (или любого другого установленного препроцессора), вместо этого CPIP рассматривает ясность и понимание как более важные, чем скорость обработки.
В ОС Windows простой ответ на один вопрос на этот вопрос заключается в том, чтобы использовать приведенную ниже команду в приглашении DOS для просмотра предварительно обработанного файла:
CL /P /C myprogram.c
Это создаст файл myprogram.i . Откройте его и обратите внимание на расширенные препроцессоры.