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 :

Structure et valeur par défaut


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Structure et valeur par défaut
    Bonjour,

    Est il possible de données une valeur par défauts à un champs d'une structure en C?
    (Approchant d'un constructeur d'orienté objet)

    Voici mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct maStructure
    {
    	int	monBooleen = FALSE;
    	/* [...] */
    };
    Résulat :
    In file included from main.c:14:
    ../includes/header.h:35: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
    Si ce n'est pas possible, quelle est la façon la plus propre de donner cette valeur par défaut à monBooleen ?
    Dans le main à la suite des déclarations de variables ?

    À savoir : C'est la seule variable qui necessite une valeur par défaut et je n'utilise qu'une variable du type maStructure donc créer une fonction semble un peu exageré.

    Merci !

  2. #2
    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
    On ne peut pas le faire au moment de la déclaration du type, mais au moment de la création de la variable.
    Pour initialiser la structure s :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct maStructure  s = {FALSE /* suivi de la valeur des autres champs séparées par des ,*/};

  3. #3
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Cela ne marche pas, je croyais ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct maStructure
    {
    	int	monBooleen;
    	/* [...] */
    };
    maStructure.monBooleen=FALSE;

    Cordialement,
    Christophe

  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
    Non, il te faut une instance de la structure pour pouvoir initialiser ou affecter des valeurs à ses champs.
    Ceci est convenable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct maStructure
    {
    	int	monBooleen;
    	/* [...] */
    } s ; // Déclaration d'une structure s
    s.monBooleen=FALSE; // affectation
    // ou
    struct maStructure
    {
    	int	monBooleen;
    	/* [...] */
    } s = {FALSE}; //Déclaration d'une structure s et  initialisation

  5. #5
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bien vu chef,
    c'est ce que je voulais faire l'instancier mais j'ai mis le même nom ( par copier-coller). Je suis aller trop vite

    Cordialement,
    Christophe

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ou, pour faciliter l'initialisation des structures, plutôt que d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct mastruct {
        int x = -1;
        int y = 1;
    };
     
    ...
     
    struct mastruct a; /* En souhaitant que a soit initialisee a (-1, 1) */
    Ce que le compilateur rejeterrait d'ailleurs, écrire une macro d'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct mastruct {
        int x;
        int y;
    };
     
    #define MASTRUCT_INIT = {-1, 1}
     
    ...
     
    struct mastruct
        a MASTRUCT_INIT, /* Initialisee */
        b, /* Non initialisee */
        c MASTRUCT_INIT /* Initialisee */
    ;
    La nécessité de la macro grandissant évidemment avec la taille de la structure ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup pour vos réponses !

    Petite question bonus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct _maStructure
    {
    	int	monBooleen;
    	int	tableau[3];
    };
    typedef struct _maStructure maStructure;
    maStructure s = {FALSE};
    Donne :
    monBooleen == FALSE
    et tableau == NULL
    Alors que "tableau = NULL" n'est pas précisé à l'initialisation de l'instance s.

    Vrai ou faux ?

  8. #8
    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
    - Dans le cas d'une liste d'initialisation incomplète, le compilateur remplit automatiquement tous les autres bytes occupés par l'objet avec des zéros.

    - tableau n'est pas NULL (NULL est une constante pointeur et tableau est ...un tableau) mais tous les bytes occupés par ses éléments ont été remplis par des zéros.

    - Il vaudrait mieux toutefois explicitement initialiser toute la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maStructure s = {FALSE,{0,0,0,}};

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci, je ferais comme cela à l'avenir !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/12/2008, 15h28
  2. Valeur par défaut dun DBLookupcombobox
    Par lol_adele dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/05/2004, 09h08
  3. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  4. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  5. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29

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