J'imprime la sortie du préprocesseur C en utilisant
gcc -E a.c
La sortie contient de nombreuses 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 type de syntaxe en C. Quelqu'un peut-il expliquer ce que cela fait?
Ces lignes sont des astuces pour le débogage (d'où vient le code qui suit la ligne)
# line-number "source-file" [flags]
Signification des drapeaux (séparés par des espaces):
Ces marqueurs de ligne sont mentionnés dans man gcc
pour -P
option.
Le -P
option est spécifiquement destinée à supprimer ces lignes pour plus de clarté:
gcc -E -P source.c
Voir documentation détaillée (réponse précédente).
Ce sont des directives de synchronisation de ligne, qui permettent à gcc
de donner des messages d'erreur corrects pour les erreurs dans #include
d fichiers. D'autres préprocesseurs (tels que yacc
/bison
) utilisent le même mécanisme pour relier les erreurs C aux lignes correctes dans l'entrée .y
fichier.