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 :

Difficultés pour faire de la compilation séparée en C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Difficultés pour faire de la compilation séparée en C
    Bonjour,
    J'ai voulu passer à la compilation séparée (j'utilise le compilateur Borland C++4.2,sous Windows),alors que jusqu'à présent je n'ai fait que de la compilation unique.Mais j'ai des problèmes à l'exécution?Comme ces problèmes semblent difficiles à saisir d'emblée,je fais le petit test suivant.
    Je définis mon source en 2 fichiers.
    Un premier fichier a.cpp contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    FILE* fi;
    int n;
    extern int d();
    int j;
    int OwlMain (int,char *[])
    {
    fi=fopen("file.txt","r");
    n=0;
    j =d();
    fclose(fi);
    return 1;
    }
    Le second fichier d.cpp contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    extern FILE* fi;
    extern int n;
    int d()
    {
     char tc[1000];
     char a,b,c;
     int i;
     for (i=0;i<1000;i++)
     {
     tc[i]=0x000F;
     }
    fscanf(fi,"%d %d %d",&a,&b,&c);
    puts ("debut du programme");
    return n+10;
    }
    La compilation et le link sont corrects.Mais à l'exécution,quand il arrive sur fscanf(fi,"%d etc..,il soulève l'exception :General Protection exception,processor fault.Si on place puts avant dans le code,il génére la même exception sur puts.Ces exceptions ne sont pas soulevées si on compile en un seul source.Je voudrais savoir ce qui se passe.Est-ce une question de bibliothèques qui ne sont pas les mêmes quand on passe en compilation séparée,et qui pour le coup auraient des erreurs?Est-ce un problème d'adressage,ou autre ?
    Quelqu'un est-il intéressé par le problème,a-t-il ces problèmes pour compiler séparément,peut-il compiler séparément avec d'autres compilateurs ?

  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,
    Ce que tu présentes est du code C et n'a rien à voir avec le C++ ni Borland. Ton problème me semble venir de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     char a,b,c;
    /*[...]*/
    fscanf(fi,"%d %d %d",&a,&b,&c);
    Tu déclares a,b,c comme des char (sur un PC, à un octet) et tu demandes à lire des int (sur ton PC, au minimum, 4 octets). Donc tu écris 3 octets de trop ce qui corrompt la pile.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Problème résolu (apparemment) : réponse à 3DArchi
    Bonjour,
    Je pense avoir trouvé la cause de mon problème d'exception.Quand on crée une application avec Borland,l'application est gérée comme un projet,dans lequel chaque source est déclarée par un noeud.Si on compile avec deux sources a.c et b.c,chaque source est déclarée par un noeud,ce que je ne faisais pas,puisque ne faisant pas de compilation séparée.
    Il n'y a pas apparemment de problème de langage C.

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il n'y a pas apparemment de problème de langage C.
    Si et 3DArchi te l'a signalé. Lors d'un fscanf, un argument doit exactement correspondre au format utilisé.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. difficulté pour faire accepter variable dans champs
    Par hernesto dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/05/2014, 12h13
  2. [AC-2003] Difficulté pour faire une requête
    Par ouinih dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/02/2012, 19h09
  3. Réponses: 1
    Dernier message: 24/09/2008, 12h42
  4. Réponses: 6
    Dernier message: 20/07/2008, 18h04
  5. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56

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