Как просмотреть исходный файл C/C++ после предварительной обработки в Visual Studio?

StackOverflow https://stackoverflow.com/questions/277258

Вопрос

Допустим, у меня есть исходный файл со множеством директив препроцессора.Можно ли увидеть, как это выглядит после того, как с ним покончил препроцессор?

Это было полезно?

Решение

cl.exe, интерфейс командной строки для Microsoft Visual C++, имеет три различных варианта вывода предварительно обработанного файла (отсюда и несогласованность в предыдущих ответах о Visual C++):

Если вы хотите выполнить предварительную обработку файла без директив #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 за его комментарий).

Как правило, вам необходимо выполнить некоторую постобработку на выходе препроцессора, в противном случае все макросы просто расширяются до одних строк, которые трудно читать и отлаживать. Для кода на C достаточно чего-то вроде следующего:

gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c

Для кода C ++ это на самом деле намного сложнее. Для GCC / g ++ я нашел этот полезный скрипт на Perl

Попробуйте cl / EP , если вы используете компилятор Microsoft C ++.

В Visual Studio вы можете скомпилировать файл (или проект) с помощью / P.

Как bk1e и Андреас М.ответ, опция /P для компилятора заставит его предварительно обработать файл.Однако в моем проекте с использованием VS2005 и Platform Builder (для встроенного процессора ARM) в диалоговом окне проекта не было опции (как описано Джимом Б), позволяющей включить эту опцию.

Я мог запустить CL вручную и добавить /P, но это не удалось, поскольку я не знал всех соответствующих параметров командной строки, которые незаметно активировались Platform Builder во время полной сборки.Поэтому мне нужно было знать все эти варианты.

Мое решение состояло в том, чтобы просмотреть файл build.log и найти строку, которая выполнялась.

CL blah-blah-blah myfile.c

Я скопировал эту строку в буфер обмена.Часть «бла-бла-бла» содержала варианты сборки и была огромной.

Вернувшись в IDE, я щелкнул правой кнопкой мыши файл myfile.c, выбрал «Открыть окно сборки», а затем в это окно вставил командную строку сборки и добавил «/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 . Откройте его и обратите внимание на расширенные препроцессоры.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top