Можно ли просмотреть код C ++ с созданными экземплярами шаблонов до его компиляции (g ++)?

у компилятора g ++ есть флаг, который создает макро-расширенный код (-E), поэтому мне интересно, есть ли способ просмотреть код программы после создания экземпляра шаблона до того, как произойдет фактическая компиляция?

13

Решение

Что ж, тем ближе вы можете прочитать AST / ABT, сгенерированный компилятором:

  • AST: абстрактное синтаксическое дерево
  • ABT: абстрактное связующее дерево

Первый представляет представление синтаксиса в том виде, в котором его понимает компилятор, а второй аналогичен после разрешение привязок (то есть, что a здесь на самом деле переменная, которая была объявлена ​​за 3 строки до или что foo соответствует функции, определенной в этом заголовке …).

Clang позволяет сбросить свой AST … который на самом деле является ABT, на самом деле, он улучшается в данный момент; предварительный просмотр

int Test __attribute__((visibility("default")));

int main(int argc, char** argv) {
int x __attribute__((aligned(4))) = 5;
int y = 2;
for (;;)
if (x != y++)
break;
return (x * y);
}

введите описание изображения здесь

Обычно вы должны увидеть, как шаблон был создан там.

Примечание: чтобы получить его, вам нужно -ast-dump перейти к входному концу лязга.

7

Другие решения

Других решений пока нет …