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 :

[c préprocesseur ] utiliser #include avec un paramètre


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [c préprocesseur ] utiliser #include avec un paramètre
    Bonjour,

    j'aimerais inclure un fichier texte (qui contient un ensemble d'insctruction c à executer) dans mon fichier c à compiler.

    en effet mon fichier texte est généré à l'aide d'un autre outil.
    j'aimerai pouvoir exécuter les instructions c qui se trouve dans ce fichier à un endroit bien déterminé de mon fichier c à compiler
    j'ai ajouté alors la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "/export/home/user/Bureau/myfile.txt"
    et tout fonctionne correctement.

    Mon problème est que le nom de mon fichier est entré cette fois ci en ligne de commande, quand je compile mon fichier c de départ avec gcc mon_fichier.c myfile.txt je récupère le nom de myfile.txt qui n'est plus fixe , c'est une variable que je récupère à l'aide de in_fnames[1]

    quand je tappe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * file= "/export/home/user/Bureau";
    char all_name[100];
    strcpy(all_name, file);
    strcat(all_name, in_fnames[0])
    #include all_name ;
    une erreur de compilation est générée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     error: #include expects "FILENAME" or <FILENAME>
    j'ai essayer avec les macro comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define COMMAND(NAME) #NAME
    #undef COMMAND
    #include COMMAND(all_name) ;
    mais ça ne fonctionne toujours pas.

    est ce quelqu'un a une idée sur comment je pourrai utiliser #include avec un paramètre , ou comment tout simplement inclure le contenu d'un fichier C dans un autre au moment de la compilation.

    merci beaucoup.

    Karine

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    *Si ton fichier est fixe, il peut être inclut par le préprocesseur et le contenu est compilé avec le reste de ton programme. C'est la première chose que tu as faite, cela marche, mais il faut connaitre l'emplacement de ton fichier à la compilation et si celui-ci change apres, cela ne sera pas pris en compte sans recompiler.

    *Dans ton second essai, tu essais de construire à l'execution un chemin vers ton fichier et tu le passe au préprocesseur qui s'execute avant la phase de compilation. Ce n'est pas étonnant qu'il se plaigne...

    Cordialement

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Karine2007 Voir le message
    Bonjour,

    j'aimerais inclure un fichier texte (qui contient un ensemble d'insctruction c à executer) dans mon fichier c à compiler.
    Salut.

    Très très mauvaise idée. On n'inclus jamais de source C. Les include ne contiennent que les signatures des fonctions et les structures de travail, pas le code. Pour la simple raison que les include sont livrés aux clients mais que le client n'a pas forcément le droit d'accéder au code.

    Donc on sépare le code compilé à part et lié et les include permettant de prototyper les fonctions utilisables afin de savoir comment les appeler

    Citation Envoyé par Karine2007 Voir le message
    en effet mon fichier texte est généré à l'aide d'un autre outil.
    j'aimerai pouvoir exécuter les instructions c qui se trouve dans ce fichier à un endroit bien déterminé de mon fichier c à compiler
    Compilation séparée de ton fichier texte et lien avec ton programme principal

    Citation Envoyé par Karine2007 Voir le message
    quand je tappe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * file= "/export/home/user/Bureau";
    char all_name[100];
    strcpy(all_name, file);
    strcat(all_name, in_fnames[0])
    #include all_name ;
    une erreur de compilation est générée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     error: #include expects "FILENAME" or <FILENAME>
    j'ai essayer avec les macro comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define COMMAND(NAME) #NAME
    #undef COMMAND
    #include COMMAND(all_name) ;
    mais ça ne fonctionne toujours pas.
    Bien entendu. Le préprocesseur est un traducteur et pas un compilateur. Il te génère un source C à partir des fichiers inclus. Et c'est ce source qui est compilé.
    De là, mettre des instructions C pour que le préprocesseur s'en serve ben il ne peut pas

    Citation Envoyé par Karine2007 Voir le message
    est ce quelqu'un a une idée sur comment je pourrai utiliser #include avec un paramètre , ou comment tout simplement inclure le contenu d'un fichier C dans un autre au moment de la compilation.
    Si ton fichier se nomme "toto.c" et que ton code principal se nomme "main.c", alors instructions pour compiler sous Linux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc toto.c main.c -o executable

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    je vous remercie bcp pour vos suggestions,
    j'ai essayé la commande
    gcc toto.c main.c -o executable

    mais mon problème est que mon fichier toto.c utilise des variables déja définis ds main.c , donc sa compilation gcc toto.c génère des érreurs (j'utilise des var sans les déclarer )
    de plus je serai (je sais pas si j'ai tort ou pas) obligé à mettre mes instruction c dans une fonction et à appeler cette fonction dans le fichier main.c

    mon but, est d'exécuter des instructions c ds un endroit bien déterminer de la main , ces instruction se trouvent ds un autre fichier et manipulent des var déjà déclarés dans la main.

    ce même problème figure avec la solution de libtcc, tu peux compiler à la volée mais indépendamment du fichier principale à compiler
    si j'essai de modifier une variable x, compiler avec libtcc génère cette erreur:
    <string>:1: 'x' undeclared
    Erreur de compilation !

    Une idée ?

    Merci bcp

    Asma

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Karine2007 Voir le message
    Bonjour,
    je vous remercie bcp pour vos suggestions,
    j'ai essayé la commande
    gcc toto.c main.c -o executable

    mais mon problème est que mon fichier toto.c utilise des variables déja définis ds main.c , donc sa compilation gcc toto.c génère des érreurs (j'utilise des var sans les déclarer )
    Bon, donc tu utilises en plus des globales. Ok, je ne vais pas te dire "faut pas le faire" bien que j'en ai une énorme envie, je vais juste t'indiquer comment compiler
    Pour pouvoir accéder à des variables définies ailleurs, il te faut les déclarer (tu remarqueras la différence entre les deux verbes) dans les autres sources en tant qu'extern. Le bon sens veut que les variables soient définies dans le main et déclarées en extern dans les autres source
    A ce moment là, le compilo peut exécuter sa première phase à savoir convertir les sources en modules objet (.o).
    Mettre les variables en extern, c'est un peu dire "tu dois prendre en compte cette variable mais t'inquiète pas, la mémoire est réservée par ailleurs". Là, le compilo ne s'inquiète plus.

    Citation Envoyé par Karine2007 Voir le message
    mon but, est d'exécuter des instructions c ds un endroit bien déterminer de la main , ces instruction se trouvent ds un autre fichier et manipulent des var déjà déclarés dans la main.
    Ben ça, c'est typique des fonctions. Tu appelles une fonction qui peut avoir été écrite par ailleurs. Et éventuellement tu lui passes ta variable...

    Ici tu trouveras un petit tuto sur la compilation et la façon de créer une librairie appelable par ailleurs...

    Citation Envoyé par Karine2007 Voir le message
    ce même problème figure avec la solution de libtcc, tu peux compiler à la volée mais indépendamment du fichier principale à compiler
    si j'essai de modifier une variable x, compiler avec libtcc génère cette erreur:
    <string>:1: 'x' undeclared
    Erreur de compilation !

    Une idée ?
    Désolé, j'ai parcouru libtcc et je trouve que c'est une usine à gaz créée pour éviter d'avoir à réfléchir sur comment faire bien les choses. Mais au lieu de faire les choses d'un coté, ben on les fait de l'autre avec ce pseudo-code mis dans un tableau...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci bcp pour ton aide et merci pour le lien aussi.

    Asma

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

Discussions similaires

  1. Include avec des paramètres
    Par nabilfaouzi dans le forum ASP
    Réponses: 2
    Dernier message: 24/01/2011, 11h27
  2. problème de includes avec passage de paramètres
    Par roxxxy dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2007, 14h28
  3. Réponses: 2
    Dernier message: 02/04/2007, 11h53
  4. [Configuration] Faire un include avec des paramètres
    Par navis84 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 26/07/2006, 10h45
  5. Réponses: 6
    Dernier message: 24/02/2005, 09h44

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