J'essaie de passer en revue un projet C / C ++ qui traite fortement des macros et des macros de type fonction. Ce que je voudrais faire, c'est remplacer les macros define et fonctionnelles par leur remplacement.

Par exemple, j'ai ce fichier:

#include <iostream>

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

int main(){

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

}

Et je veux accéder à ce fichier:

#include <iostream>

using namespace std;

int main(){

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

}

Veuillez noter que je ne cherche pas à remplacer les lignes #include.

MODIFIER:

gcc -E développe les macros #define mais il développera également les macros #include. JE NE VEUX PAS que le #include soit développé.

1
Omid N 4 mai 2020 à 16:30

3 réponses

Meilleure réponse

J'ai déjà utilisé gcc -nostdinc -E ... ( ou quelque chose de similaire ).

Impossible de tester ceci pour le moment; Je ne me souviens pas vraiment pourquoi je l'ai utilisé non plus

1
pmg 5 mai 2020 à 09:57

Utilisez gcc -E pour prétraiter votre fichier source. Recherchez ensuite la première ligne du fichier source d'origine après tout #include et supprimez toutes les lignes avant cette première ligne. Ensuite, restaurez #include à partir du fichier source d'origine.

Le préprocesseur marque les lignes source d'origine pour le débogueur comme ci-dessous afin que vous puissiez facilement trouver la première ligne d'origine appropriée après #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"

Que signifient les nombres dans les fichiers .i prétraités lors de la compilation de C avec gcc?

2
S.M. 5 mai 2020 à 08:04

GCC a le drapeau -E qui lui permet de sortir le code source prétraité.

0
Pat Pac 4 mai 2020 à 13:36