Как обрабатывать макросы только в проекте C / C ++ без его компиляции? - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь рассмотреть проект на C / C ++, который в значительной степени связан с макросами и функциональными макросами. Я хотел бы заменить define и функционально-подобные макросы их заменой.

Например, у меня есть этот файл:

#include <iostream>

#define SUM(a,b,c,d) a+b+c+d
using namespace std;

int main(){

    cout << SUM(1,2,3,4) << endl;

}

И я хочу достичь этот файл:

#include <iostream>

using namespace std;

int main(){

    cout << 1+2+3+4 << endl;

}

Обратите внимание, что я не собираюсь заменять строки #include.

РЕДАКТИРОВАТЬ:

gcc -E расширяет макросы #define, но также расширяет макросы #include. Я не хочу, чтобы #include был расширен.

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

Используйте g cc -E для предварительной обработки вашего исходного файла. Затем найдите первую строку исходного исходного файла после всех #include и удалите все строки перед этой первой строкой. Затем восстановите #include из исходного исходного файла.

Препроцессор помечает исходные исходные строки для отладчика, как показано ниже, чтобы вы могли легко найти правильную исходную первую строку после # include.

# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "main.c"

Что означают числа в предварительно обработанных .i файлах при компиляции C с g cc?

1 голос
/ 05 мая 2020

Я использовал gcc -nostdinc -E ... ( или что-то подобное ) раньше.

Не могу проверить это в данный момент; действительно не помню точно, почему я использовал это

0 голосов
/ 04 мая 2020

G CC имеет флаг -E, который позволяет выводить предварительно обработанный исходный код.

...