Pourquoi reste-t-il des lignes # après le préprocesseur ?

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Juste pour voir, je créé un main.c dans lequel je mets simplement un printf("coucou"); j’entre la ligne de commande suivante :

gcc main.c -E

Cette ligne est censée donner le résultat du fichier après le passage du préprocesseur, et là je suis surpris de voir que parmi les lignes générées (qui proviennent du #include <stdio.h>) de très nombreuses lignes ont un # au début… On m’a souvent dit que le # servait à parler au préprocesseur mais puisque cette étape est terminée à quoi servent ces lignes ?

Hello,

Je suppose que tu fais référence à ces lignes qui apparaissent un peu partout dans le retour de la commande, notamment au début :

# 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"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 461 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 452 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 453 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4
# 454 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 462 "/usr/include/features.h" 2 3 4
# 485 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
# 486 "/usr/include/features.h" 2 3 4
# 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4
# 28 "/usr/include/stdio.h" 2 3 4

Ce ne sont pas des directives de préprocesseur mais des commentaires :)

(Par contre je serais bien incapable de t’expliquer ce qu’ils signifient :-° )

+1 -0

Techniquement ce ne sont pas vraiment des informations de debug, ni des commentaires; ces lignes sont utiles pour les lexers/parsers car elles indiquent la provenance (y-compris le numéro de ligne) des fragments de code source dans la sortie du préprocesseur, et donc d’avoir l’information "position dans le code source" qui est correct. Ce sont donc des "informations sur les positions dans le source".

Par exemple si le compilateur lance une erreur ou un warning sur une ligne de code, on veut qu’il donne le bon fichier en entrée (même après un #include etc.) et le bon numéro de ligne (dans le fichier source initial) dans le message, ce qui permet aux éditeurs par exemple d’aller à l’emplacement source correspondant. Si ces informations étaient effacées du fichier de sortie, ce ne serait pas possible sans que le compilateur contrôle complètement l’étape de préprocessing.

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte