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 :

Faire un fichier avec des tableaux comme constantes


Sujet :

C

  1. #1
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut Faire un fichier avec des tableaux comme constantes
    Bonjour,

    Je me demande si ma façon de procéder est correcte

    J'ai un fichier couleur.h où je définie un nouveau type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef int Color[3] ;
    puis j'inclue ce fichier dans le fichier couleur.c ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "couleur.h"
     
    const Color ROUGE = { 255, 0, 0 } ;
    const Color NOIRE = { 0, 0, 0 } ;
    const Color BLANC = { 255, 255, 255 } ;
    puis j'inclue le fichier.c dans mon main.c par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "color.c"
     
    int 
    main (int argc, char *argv[])
    {
    	printf( "r : %d, v : %d,  b : %d", NOIRE[0], NOIRE[1], NOIRE[2] ) ;
    	return 0;
    }
    C'est le fait d'inclure un fichier .c que je trouve bizard mais je n'est pas trouvé d'autre solution

    Qu'en pensé vous ?
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    C'est le fait d'inclure un fichier .c que je trouve bizard mais je n'est pas trouvé d'autre solution

    Qu'en pensé vous ?
    C'est effectivement une manière étrange de faire


    pourquoi ne déclare tu pas tes constantes dans ton .h?

    avec quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _COLOR_H_
    #define _COLOR_H_
     
     
     
    typedef int Color[3] ;
     
    const Color ROUGE = { 255, 0, 0 } ;
    const Color NOIRE = { 0, 0, 0 } ;
    const Color BLANC = { 255, 255, 255 } ;
     
    #endif
    le #ifndef / #define sert à éviter les doubles inclusions de ton fichier.h

    De plus si je ne me trompe pas des champs RVB vont de 0 à 255, donc tu peux les stocker sur des unsigned char.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    pourquoi ne déclare tu pas tes constantes dans ton .h?
    Je trouvai ça également bizard.
    Un fichier .h n'est pas sensé contenir que des définitions ?

    J'ai testais, ça marche bien
    pour le makefile je fais juste ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main : main.c color.h
    	gcc -c main.c
    Je fais pas de fichier .o avec mes couleurs ?


    De plus si je ne me trompe pas des champs RVB vont de 0 à 255, donc tu peux les stocker sur des unsigned char.
    bien vu !

    Merci beaucoup pour tes réponses
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Effectivement, un fichier .h ne devrait contenir que des déclarations (donc pas de const Color ROUGE = { 255, 0, 0 } et on n'inclue pas de .c dans un autre .c.

    La solution est de compiler les deux .c et de les lier ensemble.

  5. #5
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Accéssoirement, tu peux aussi avoir un définition de Color plus complexe en utilisant un union avec quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct {
      unsigned red   :8;
      unsigned green :8;
      unsigned blue  :8;
    } RgbColorCode ;
     
    typedef unsigned char RgbColorArray[3];
     
    typedef union {
      RgbColorCode  asRGB;
      RgBColorArray asArray;
    } Color;
    Cela te permettrai d'avoir des syntaxe plus sympas du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Color maCouleur;
     
    maCouleur.asRgb.red   = 255;
    maCouleur.asRgb.green = 0;
    maCouleur.asRgb.blue  = 127;
     
    printf("Couleur: asArray %c %c %c", 
    		 maCouleur.asArray[0],
    		 maCouleur.asArray[1],
    		 maCouleur.asArray[2]);
    Par contre comme je n'ai pas de compilateur sous la main, il est possible que je fasse quelques coquilles sur la syntaxe, mais l'esprit est là je pense.

    De même si tu ne te sens pas encore à l'aise avec ce type de déclaration reste avec ton tableau et garde cette idée pour plus tard quand tu sera plus à l'aise avec le C.

    http://publications.gbdirect.co.uk/c...bitfields.html
    http://publications.gbdirect.co.uk/c...r6/unions.html
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  6. #6
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    ok

    Donc je reviens sur l'organisation du début sauf que dans main.c

    J'ai mis

    #include "couleur.h";

    J'ai un makefile comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    all :: main
     
    main : main.o color.o
    	gcc main.o color.o -o main 
     
    main.o : main.c
    	gcc main.c -c
     
    color.o : color.c color.h
    	gcc color.c -c
    mon fichier couleur.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifndef _COLOR_H_
    #define _COLOR_H_
    typedef unsigned int Color[3] ;
    Color NOIRE ; 
    #endif
    mon fichier couleur.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "color.h"
     
    NOIRE[0] = 0 ;
    NOIRE[1] = 0 ;
    NOIRE[2] = 0 ;
    Mais ça marche pas
    color.c:5: warning: data definition has no type or storage class
    color.c:5: error: conflicting types for ‘NOIRE’
    color.h:6: note: previous declaration of ‘NOIRE’ was here
    color.c:5: error: invalid initializer
    [...]
    Et si je veux que NOIR existe dans main.c je suis bien obligé de le définir dans couleur.h
    ?
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ton point H définit la variable NOIRE, il suffit uniquement de la déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifndef _COLOR_H_
    #define _COLOR_H_
    typedef unsigned int Color[3] ;
    extern Color NOIRE ; 
    #endif
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    C'est bon ça marche

    Merci beaucoup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Color.h
    extern const Color NOIRE ;
    
    // Color.c
    const Color NOIRE = { 255, 0, 0 } ;
    Citation Envoyé par jabbounet;
    Accéssoirement, tu peux aussi avoir un définition de Color plus complexe en utilisant un union avec quelque chose du style:
    Sauf erreur de ma part, on peux utiliser que un seul membre d'un union à la fois. Si j'utilise un union, Je ne pourrais utiliser que asRGB ou asArray pour un type Color donné.

    Ceci ne marchera pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maCouleur.asRgb.red   = 255;
    printf( "red : %c", maCouleur.asArray[0] ) ;
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  9. #9
    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
    Sauf erreur de ma part, on peux utiliser que un seul membre d'un union à la fois. Si j'utilise un union, Je ne pourrais utiliser que asRGB ou asArray pour un type Color donné.
    Exact, la proposition de jabbounet est non portable (et inutile, Color est déja un tableau qu'il serait suffisant de déclarer comme tableau de unsigned char)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  10. #10
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    ah oui, j'avais oublié ces détails sur les unions. merci
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

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

Discussions similaires

  1. Faire un exécutable avec des fichiers m
    Par bakaratoun dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/01/2010, 09h26
  2. [Tableaux] faire une page avec des catégorie
    Par kevinf dans le forum Langage
    Réponses: 20
    Dernier message: 29/09/2006, 05h58
  3. Réponses: 5
    Dernier message: 26/08/2006, 12h14
  4. Faire une boucle avec des variables vides ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 23/02/2006, 09h33
  5. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 00h05

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