Макроэффект в коде - PullRequest
       3

Макроэффект в коде

5 голосов
/ 04 апреля 2011

если у меня есть макрос, например

#define max(a,b) (((a) > (b)) ? (a) : (b))

, тогда я использую его в "нормальном коде"

int foo()
{
...
c = max(a,b);
...
}

Есть ли способ увидеть код после предварительной компиляции?Существует ли способ увидеть эффект подстановки макросов (может быть, это сделано компилятором, я использую gcc)?

Я хотел бы получить что-то вроде этого:как это?

Ответы [ 3 ]

7 голосов
/ 04 апреля 2011

Вы хотите увидеть предварительно обработанный исходный код.Обычно ваш компилятор C имеет переключатель для вывода предварительно обработанного вывода.

Для gcc это gcc -E [C-filename].

Для msvc это cl /EP или cl /P.См. MSVC / P (предварительная обработка в файл)

3 голосов
/ 04 апреля 2011

Используйте cpp, препроцессор GCC C .

gcc - это только набор инструментов: cpp, cc и ld для примеров.

1 голос
/ 04 апреля 2011

Для GCC вы также можете использовать опцию -save-temps . Это создаст 3 промежуточных файла:

  • *. I -> C предварительно обработанный источник
  • *. S -> вывод сборки (по умолчанию в синтаксисе AT & T, но также может быть переключен на Intel).
  • *. O -> объектный файл.

Я предпочитаю эту опцию, потому что она дает больше контроля над процессом компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...