71 votes

sortie du préprocesseur gcc

J'imprime la sortie du préprocesseur C en utilisant

 gcc -E a.c
 

La sortie contient beaucoup de lignes comme

 # 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3

# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3
 

Je n'ai jamais vu ce genre de syntaxe en C. Est-ce que quelqu'un peut expliquer ce que cela fait?

82voto

jdehaan Points 14019

Ces lignes sont des astuces pour le débogage (d'où provient le code suivant la ligne)

 # line-number "source-file" [flags]
 

Signification des drapeaux (séparés par des espaces):

  • 1 - Début d'un nouveau fichier
  • 2 - Retour au fichier précédent
  • 3 - Le texte suivant provient d'un fichier d'en-tête système (#include <> vs #include "")
  • 4 - Le texte suivant doit être traité comme enveloppé dans un bloc externe "C" implicite.

50voto

uvsmtid Points 445

Ces marqueurs sont mentionnés dans les options man gcc pour -P .

L'option -P vise spécifiquement à supprimer ces lignes pour plus de clarté:

 gcc -E -P source.c
 

2voto

geekosaur Points 26170

Ce sont des directives de synchronisation de ligne, qui permettent à gcc de donner des messages d'erreur corrects pour les erreurs dans les fichiers #include d. D'autres préprocesseurs (tels que yacc / bison ) utilisent le même mécanisme pour relier les erreurs C aux lignes correctes du fichier d'entrée .y .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X