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 :

aide sur les headers


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 81
    Points : 41
    Points
    41
    Par défaut aide sur les headers
    bonjour tous le monde
    j'ai fait un petit programme pour m'entraine sur les tableaux.
    mon projet contuent deux fichiers
    l'un c'est tableau.h et l'autre c'est tableau.c .
    d'apres ma connaissance le headers contients seulemnt les prototypes, est ce que je devrais faire seulement les proto types dans cette fichiers comme ça ?
    tableau.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
    tableau.c :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
    #include <stdlib.h>
    #include "tableau.h"
    long s=0,m=0;
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
    int main(int argc, char *argv[])
    {
       long tableau[4] = {10, 15, 3}, i = 0;
     
        affiche(tableau, 4);
        sommeTableau( tableau , 4 );
    printf("sommetableau=%ld\n",s);
     moyenneTableau(tableau,4);
        printf("la moyenne = %ld\n",m);
      system("PAUSE");	
      return 0;
    }
    void affiche(long tableau[], long tailleTableau)
    {
        long i;
     
        for (i = 0 ; i < tailleTableau ; i++)
        {
            printf("%ld\n", tableau[i]);
        }
    }
    long sommeTableau(long tableau [], long taille)
    {
         long i=0;
         for(i=0;i<taille;i++)
         s=s+tableau[i];
     
         }
    double moyenneTableau(long tableau [],long taille)
    {
         long i=0,s=0;
         for(i=0;i<taille;i++)
         {
                              s=s+tableau[i];
                              }
                              m=s/taille;
                              return m;
                              }
    se programme ne veut pas complier.
    vous pouvez me dire comment je vais definir le headers pour ce programme et aussi les erreurs ? avec une explication .
    merci à vous tous.

    [-mod- Merci de lire les regles du forum. ]

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Personnellement, ça compile très bien chez moi, à quelques warnings près.
    Par contre, tu devrais supprimer les trois lignes avant main() qui sont en fait dans ton header et mettre main dans un troisième fichier histoire que l'header serve vraiment à quelque chose et ne pas utiliser de variables globales (recupère les valeurs retournées par tes fonctions quand tu n'as pas oublié de la retourner cf. sommeTableau).
    Quelle erreur as-tu ?

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je n'ai pas fait tourné ton code vu que quelqu'un l'a déjà fait et que ça marche.

    Pour ce qui est du header, je te conseillerai de mettre les prototypes dedans, mais de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef _TABLEAU
    #define _TABLEAU
     
    void affiche(long tableau[], long tailleTableau);
    long sommeTableau(long tableau [], long taille);
    double moyenneTableau(long tableau[],long taille);
     
    #endif
    Ca te sera utile si ton programme comporte plusieurs fichiers sources, ça devient rapidement le cas quand on programme.
    Cette façon évitera au compilateur de compiler plusieurs fois ton header s'il est appelé dans plusieurs fichiers sources.

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par ToTo13
    #ifndef _TABLEAU
    #define _TABLEAU
    Les identifieurs commencant par _ sont reserves a l'implementation. Utiliser plutot H_TABLEAU.
    Cette façon évitera au compilateur de compiler plusieurs fois ton header s'il est appelé dans plusieurs fichiers sources.
    Ce n'est pas le probleme. La garde que tu indiques evite d'inclure plusieurs fois le meme header lorsque le meme fichier source (unite de compilation) est compile.

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int argc, char *argv[])
    {
       long tableau[4] = {10, 15, 3},...
    Tu n'as pas (peut être volontairement) initialisé le dernier élément qui en conséquence sera initialisé à la valeur par défaut (0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    long sommeTableau(long tableau [], long taille)
    {
         long i=0;
         for(i=0;i<taille;i++)
         s=s+tableau[i];     
         }
    La fonction doit retourner un long ce qu'elle ne fait pas. s devrait être une variable locale initialisée à 0 (d'ailleurs, il n'y a aucune raison d'avoir des variables globales ici) et le fonction se terminer par return s;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    double moyenneTableau(long tableau [],long taille)
    {
         long i=0,s=0;
         for(i=0;i<taille;i++)
         {
              s=s+tableau[i];
          }
          m=s/taille;
          return m;
     }
    - m devrait être locale et main recueillir la valeur retournée par la fonction pour en faire ce que bon lui semble
    - la division entre s et taille est une division entière et le résultat sera le quotient donc faux
    - utilise les fonctions que tu as écrites. Ce n'est pas la peinr de dupliquer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double moyenneTableau(long tableau [],long taille)
    {
          return (double)sommeTableau(tableau,taille)/taille;
     }

  6. #6
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Et si ça ne compile pas, que tu veux qu'on t'aide, il faut donner les messages d'erreur que tu obtiens stp.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 81
    Points : 41
    Points
    41
    Par défaut
    bonjours
    merci pour tous
    au dessous de directives preprocesseur {#include <stdio.h> et
    #include <stdlib.h> } j'ai mis #include "tableau.h" pour inserer les prototypes des fonctions, apres la compilation il me donne ces erreurs :
    - tableau.h: No such file or directory.
    - conflicting types for 'affiche'
    - previous implicit declaration of 'affiche' was here
    ces deux derniers lignes c'est pour chaque fontions
    sommeTableau et moyenneTableau.
    merci

  8. #8
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Tu as du résoudre les deux derniers problèmes grâce à ce qui a déjà été dit. Je me permet de préciser qu'il faut dire au compilo où se trouvent les ".h que tu inclus avec des guillemets". Donc passe l'option '-I.' si tu veux qu'il trouve tableau.h dans ton répertoire de compile courant.

    Et au risque de paraitre chiant, la prochaine fois tu peux directement copier coller le message du compilo même si il y a des numéros de lignes et tout. Parfois on trouve des bugs grâce à ces petits détails (parfois toi même en relisant ce que tu viens de coller ).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    ben normalement si le fichier est dans la racine du source qui l'appel il ne devrait pas y avoir de probleme, c'est la raison pour laquel on mets des "" si il utilise -I. il dois passer aux <>

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Les differences de comportement entre inclusion avec "" et avec <> different suivant les compilateurs. La seule chose de sure, c'est que si <foo> fonctionne, "foo" doit fonctionner aussi. J'ai collecte une liste de comportements existants. Si vous en connaissez d'autres, je suis preneur.

    En general -- et sauf options particulieres -- ce que fait "" en plus de <>, c'est de chercher dans le repertoire du fichier contenant l'inclusion, pas dans le repertoire d'ou est lance le compilateur (ce qui peut etre different pour le .c et l'est souvent pour les .h).

    La plupart des cas ou j'ai vu utiliser -I., c'etait parce que des fichiers etaient inclus avec <> quand il aurait mieux fallu utiliser "".

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Les differences de comportement entre inclusion avec "" et avec <> different suivant les compilateurs. La seule chose de sure, c'est que si <foo> fonctionne, "foo" doit fonctionner aussi. J'ai collecte une liste de comportements existants. Si vous en connaissez d'autres, je suis preneur.

    En general -- et sauf options particulieres -- ce que fait "" en plus de <>, c'est de chercher dans le repertoire du fichier contenant l'inclusion, pas dans le repertoire d'ou est lance le compilateur (ce qui peut etre different pour le .c et l'est souvent pour les .h).

    La plupart des cas ou j'ai vu utiliser -I., c'etait parce que des fichiers etaient inclus avec <> quand il aurait mieux fallu utiliser "".

    je ne sais pas pour Windows..

    Sous systèmes unixoides, <> va chercher dans /usr/include/..., et "" par défaut dans le répertoire courant (de là où on lance le makefile), pas dans le répertoire où est situé le source (quoique.. à la réflexion.. à vérifier), SAUF si les chemins sont précisés par -I...

    le -I est pratiquement toujours utilisé sous système unixoide (voir les distributions et packages tout faits), car souvent l'arborescence d'un package est

    src inc bin doc

    ou

    src bin doc
    ||
    tools lib inc

    et le dépôt d'un package se fait n'importe où l'utilisateur le choisit..

    Et de plus les répertoires /usr/include sont réservés (en général) au système et packages installés pour tous les utilisateurs...

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par souviron34
    je ne sais pas pour Windows..

    Sous systèmes unixoides, <> va chercher dans /usr/include/..., et "" par défaut dans le répertoire courant (de là où on lance le makefile), pas dans le répertoire où est situé le source (quoique.. à la réflexion.. à vérifier), SAUF si les chemins sont précisés par -I...
    Verifie

    le -I est pratiquement toujours utilisé sous système unixoide
    -IquelqueChose, oui. -I., quasiment chaque fois que je l'ai vu, c'etait parce que <> etait utilise ou "" l'aurait du.

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Verifie
    Pas aujourdhui mais je regarderais..

    Mais en fait ma remarque était principalement par rapport au -I...

    Il est toujours judicieux lors d'un projet (sauf si on a tout dans le même répertoire) de définir le -I dans le makefile.

    Citation Envoyé par Jean-Marc.Bourguet
    -IquelqueChose, oui. -I., quasiment chaque fois que je l'ai vu, c'etait parce que <> etait utilise ou "" l'aurait du.
    de ce que j'ai vu moi, le -I. (et ça m'est arrivé ) vient du fait que la variable de définition du répertoire "home" a été en cours de route définie en relatif ("HOME_SRC = ./") et non en absolu ("HOME_SRC=$PWD"), ce qui fait que la définition des chemins dans le makefile ("INC_PATH= -I/$HOME_SRC/include") est devenue "INC_PATH=-I./include", ce qui donne -I./ si les .h étaient au même niveau.....

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

Discussions similaires

  1. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  2. Aide sur les groupes (ADO)
    Par portu dans le forum QuickReport
    Réponses: 3
    Dernier message: 18/08/2004, 16h13
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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