Временный файл с содержимым всех включенных заголовков

Мне нужно отслеживать ошибку, связанную с включением файлов заголовков, я подозреваю, что один или несколько файлов имеют непревзойденные фигурные скобки и / или круглые скобки, и я думаю, что было бы полезно взглянуть на файл, который предоставляет препроцессор. компилятору; это файл, в котором выполнены все подстановки макросов и все содержимое заголовков вставлено вместе.

Я знаю, что есть опция компилятора для сохранения этих временных файлов на диск, но после поиска в Google я не могу найти строку поиска, которая приносит мне эту информацию, поэтому я прошу помощи:

Какая опция компилятора позволяет сохранять на диск вывод препроцессора?

Меня интересует этот вариант для следующих компиляторов:

  • gcc
  • лязгать
  • msvc

person PaperBirdMaster    schedule 17.04.2013    source источник
comment
Вы также можете взглянуть на это   -  person Suvarna Pattayil    schedule 17.04.2013
comment
Хороший @SuvP! спасибо, кстати, я читаю о -save-temps для gcc   -  person PaperBirdMaster    schedule 17.04.2013
comment
поиск в Google для вывода препроцессора C, C после предварительной обработки и другие похожие поисковые строки содержат другие, похожие и хорошо отвеченные вопросы SO в своих первых результатах. Итак, какие поисковые строки вы пробовали?   -  person Arne Mertz    schedule 17.04.2013
comment
Кстати: вам нужно уменьшить количество источников и стереть как можно больше включений. Предварительная обработка выходных данных с несколькими 100k строками достигается быстро за счет включения всего нескольких заголовков.   -  person Arne Mertz    schedule 17.04.2013
comment
Мне стыдно, @ArneMertz, после того, как я отказался от поиска в Google, я нашел много ответов ... не помню строки поиска, которые я пробовал   -  person PaperBirdMaster    schedule 17.04.2013


Ответы (1)


Большинство, если не все компиляторы (все, что я когда-либо использовал) позволяют «предварительно обработать исходный файл», используя CC -E myfile.cpp > myfile.i, где CC - имя вашего компилятора (например, CL, gcc, g++, clang, clang++ и т. Д.

Это создаст большой файл со всем, и если у вас есть доступ к редактору, который будет автоматически форматировать ваш файл (например, M-x indent-region в Emacs и т.п.), вы можете затем использовать его, чтобы сделать отступ и посмотреть, где находятся ваши несогласованные фигурные скобки.

person Mats Petersson    schedule 17.04.2013