IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Lire le code après la compilation


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 36
    Points
    36
    Par défaut Lire le code après la compilation
    Bonjour

    J'ai lu quelque part qu'il était possible de lire le code généré par le préprocesseur et celui généré par le compilateur.

    J'aimerais bien savoir comment, car j'essaye de comprendre certaines notions de méta-programmation qui nécessite de nombreuses définitions de macro.

    Pouvez-vous me dire comment se nomme cette opération car toutes mes recherches sur Google, sur Developpez.com et dans les menus d'options de mon EDI ont été infructueuses?

    Merci de réussir à comprendre ma question.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Pour lire le code après la phase de pré-processing :
    -> Sur Visual : Propriétés du projet - C/C++ - Preprocessor - Generate PreProcessed File : NO->With Line Numbers (/P) ou Without Line Numbers (/EP /P)

    -> Pour gcc, c'est -E

    [EDIT] : pour le code généré, je ne connais que deux types de sorties : le code assembleur et le code machine
    Pour Visual, c'est toujours : Propriétés du projet - C/C++ - Output Files - Assembler Output

    Pour gcc; il faut voir ici.
    Images attachées Images attachées   

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Salut,

    Et si tu posais les questions qui te tarabisquottent directement, plutôt que de perdre du temps à analyser ce qui est fait au niveau du préprocesseur et / ou du compilateur

    Le souhait de comprendre les choses est une bonne chose, mais se baser sur le travail d'une machine pour y arriver me semble revenir à courir le risque de mal comprendre ce qui est fait et / ou de partir sur de mauvaises bases

    Pour la plupart, les définitions de marcros préprocesseur vont se "contenter" de remplacer un terme défini par l'équivalent donné au sein même du code, et avant même le premier passage du compilateur, de manière à permettre à celui-ci de retrouver des valeurs cohérentes par rapport à ce à quoi il s'attend

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    C'est -S avec gcc pour générer de l'assembleur.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Tu as surement raison, koala01, mais je crois qu'ont c'est mal compris.
    Je sais ce que représente les macros et quand je veux lire du code qui en contient je n'ai qu'a imaginer le code lorsque les termes définis auront été remplacés.

    Cependant, les macros qui utilisent elles-même des macros, qui utilisent elles-même d'autres macros, etc. obligent à "traduire" des bouts de code ce qui peut accroitre la confusion d'une partie de code déjà compliqué pour des yeux peu exercés.

    En lisant le code après le passage du préprocesseur je ne cherche pas à éviter de faire ces "traductions" moi-même.
    Mon but est de séparer les parties qui me semble compliquées pour plus facilement mètre le doigt sur la notion qui m'échappe et qui m'empêche d'avancer.

    -------------------------------------------------------------------------------

    Je suis surtout intéressé par le code après le pré-processing, celui après la compilation c'était juste par curiosité.

    Il y a surement quelque chose que je ne comprend pas...
    Je fait ça:
    -> Sur Visual : Propriétés du projet - C/C++ - Preprocessor - Generate PreProcessed File : NO->With Line Numbers (/P) ou Without Line Numbers (/EP /P)
    Ensuite, je fais Build et je me retrouve avec une erreur de l'éditeur
    de liens qui me dit que le fichier main.obj n'a pas pu être ouvert.
    Ce fichier n'est pas dans le dossier du projet et n'a donc pas été créé.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Cbenlfun Voir le message
    Ensuite, je fais Build et je me retrouve avec une erreur de l'éditeur
    de liens qui me dit que le fichier main.obj n'a pas pu être ouvert.
    Ce fichier n'est pas dans le dossier du projet et n'a donc pas été créé.
    Effectivement, en activant l'option, cela correspond à demander au compilateur de s'arrêter après la phase de pré-processing. Donc le reste de la compilation échoue. Tu retrouves des fichiers après pré-processing au niveau du .cpp mais avec l'extension '.i'. Tu ne peux pas à la fois générer la version après le pré-processing et générer l'exécutable de ton projet (du moins, je n'ai pas trouvé comment le faire).

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Merci, c'est ça qui me manquait, je ne savait pas où trouver le code.
    J'avais fouillé dans les dossiers du projets mais, pas suffisamment...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2006, 13h00
  2. Réponses: 2
    Dernier message: 06/04/2006, 10h35
  3. Lire un code barre
    Par *Lolo* dans le forum JBuilder
    Réponses: 9
    Dernier message: 14/03/2006, 13h21
  4. Modifier le code après la compilation, c'est possible?
    Par marcus333 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 09h52
  5. Lire un code à barre dans un champ d'une table
    Par tleboukaka dans le forum Débuter
    Réponses: 1
    Dernier message: 05/09/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo