petite question sur des contraintes de compilation
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

petite question sur des contraintes de compilation



  1. #1
    invite397ab838

    petite question sur des contraintes de compilation


    ------

    Bonjour,
    J'ai une question dans un exerice ou je seche totalement j'espère que vous pourrez m'aider:

    On a un programme composé de 3 modules X.c Y.c et Z.c
    X.c contient la fonction main mais aussi, utilise des fonctions des 2 autres modules(Y.c et Z.c) .
    Z.c utilise elle aussi des fonctions du module Y.c

    Quelles sont les contraintes de compiltation des modules ? Quelles sont les fichiers qui sont utile à l'édition(en GCC)

    En espérant que vous pourriez m'apporter une lumière car la je ne voit vraiment vraimant pas, je vous remercie

    -----

  2. #2
    invite397ab838

    Re : petite question sur des contraintes de compilation

    Je parle de langage C au fait je précise

  3. #3
    invite1c6b0acc

    Re : petite question sur des contraintes de compilation

    Bonjour,
    en fait, il n'y a pas vraiment de contrainte de compilation, sauf qu'il est très fortement conseillé, même si ce n'est pas obligatoire, que les modules appelants connaissent les prototypes des fonctions qu'ils appellent.

    Pour cela, le plus simple est de créer des fichiers Y.h et Z.h qui contiennent respectivement les prototypes des fonctions de Y.c et Z.c
    Il faut alors inclure ces fichiers (avec #include) au début des sources qui utilisent les fonctions correspondantes : inclure Y.h dans X.c et dans Y.c ; inclure Z.h dans X.c, Y.c et Z.c

    Tu remarqueras que je conseille d'inclure Y.h dans Y.c et Z.h dans Z.c : c'est pour que le compilateur puisse vérifier que les prototypes des fonctions sont bien conforme à leur déclaration.

    A+

  4. #4
    invite895675d5

    Re : petite question sur des contraintes de compilation

    Citation Envoyé par Chanur Voir le message
    Bonjour,
    en fait, il n'y a pas vraiment de contrainte de compilation, sauf qu'il est très fortement conseillé, même si ce n'est pas obligatoire, que les modules appelants connaissent les prototypes des fonctions qu'ils appellent.
    A+
    Cela devient obligatoire si la fonction est utilisée avant d'être définie. Il y a donc bien une contrainte (en fait 2 mais elles sont exclusives) :
    - soit tu définis les prototypes de tes fonctions dans un fichier d'entête (.h)
    - soit tu compiles dans le bon ordre (quand c'est possible).

  5. A voir en vidéo sur Futura
  6. #5
    invite1c6b0acc

    Re : petite question sur des contraintes de compilation

    Non, je maintiens, ce n'est pas obligatoire (et l'ordre de compilation n'y change rien). Par contre ça peut générer des erreurs : en l'absence de prototype, le compilateur considère que toute fonction retourne un int, ce qui peut être faux, et il ne peut pas vérifier le nombre et le type des arguments. Si on donne de mauvais arguments, on obtient n'importe quoi, évidemment.


    J'ai construit un petit exemple : ce sera plus clair.


    D'abord sans prototype :
    Y.c :
    Code:
    int division_arrondie (double a, double b)
        {
        return (int) (a/b + 0.5);
        }
    double division_exacte (double a, double b)
        {
        return a/b;
        }
    X.c :
    Code:
    #include <stdio.h>
    int main ()
        {
        double a = 5;
        double b = 3;
        double resultat_exact;
        int resultat_arrondi;
    
    
        resultat_exact = division_exacte (a, b);
        resultat_arrondi = division_arrondie (a, b);
    
    
        printf ("resultat exact = %lf\n", resultat_exact);
        printf ("resultat arrondi = %d\n", resultat_arrondi);
    
    
        return 0;
        }
    Compilation :
    Code:
    > gcc -Wall -o essai X.c Y.c
    X.c: In function ‘main’:
    X.c:9:2: attention : implicit declaration of function ‘division_exacte’ [-Wimplicit-function-declaration]
    X.c:10:2: attention : implicit declaration of function ‘division_arrondie’ [-Wimplicit-function-declaration]
    Exécution :
    Code:
    > essai
    resultat exact = 2.000000
    resultat arrondi = 2
    Le résultat "exact" est faux !




    La même chose en ajoutant les prototypes :
    Y.h:
    Code:
    int division_arrondie (double a, double b);
    double division_exacte (double a, double b);
    Y.c :
    Code:
    #include "Y.h"
    int division_arrondie (double a, double b)
        {
        return (int) (a/b + 0.5);
        }
    double division_exacte (double a, double b)
        {
        return a/b;
        }
    X.c :
    Code:
    #include <stdio.h>
    #include "Y.h"
    int main ()
        {
        double a = 5;
        double b = 3;
        double resultat_exact;
        int resultat_arrondi;
    
    
        resultat_exact = division_exacte (a, b);
        resultat_arrondi = division_arrondie (a, b);
    
    
        printf ("resultat exact = %lf\n", resultat_exact);
        printf ("resultat arrondi = %d\n", resultat_arrondi);
    
    
        return 0;
        }
    Compilation :
    Code:
    > gcc -Wall -o essai X.c Y.c
    Pas de warning

    Exécution :
    Code:
    > essai
    resultat exact = 1.666667
    resultat arrondi = 2
    Resultat correct


    Explication : dans le premier exemple, en compilant X.c, le compilateur considère que la fonction "resultat_exact" retourne un int et ne prévoit que 4 octets pour stocker son résultat, alors qu'il en faut 8 pour stocker le vrai résultat de la fonction.


    A noter que si je n'avais pas mis -Wall en option de compilation, il n'y aurais même pas eu de warning.

Discussions similaires

  1. petite question sur la résolution des photos ??
    Par invite5b9bd9f8 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 7
    Dernier message: 23/10/2012, 19h05
  2. Petite question sur des calculs d'incertitudes
    Par invite0b99190c dans le forum Physique
    Réponses: 2
    Dernier message: 30/09/2012, 13h28
  3. petite question sur la celerité des ultrasons
    Par invitef5c785a0 dans le forum Physique
    Réponses: 2
    Dernier message: 06/06/2011, 13h49
  4. Calcul des contraintes sur une plaque trouée
    Par invite24f422d6 dans le forum Physique
    Réponses: 7
    Dernier message: 20/06/2010, 01h24
  5. [Biologie Cellulaire] Petite question sur la méiose et le devenir des gamètes...
    Par invitecf1a7f9f dans le forum Biologie
    Réponses: 3
    Dernier message: 04/06/2008, 17h58