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 averti
    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
    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 confirmé
    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
    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 : 39
    Localisation : France, Haute Loire (Auvergne)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    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 confirmé
    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
    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 : 39
    Localisation : France, Haute Loire (Auvergne)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    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 confirmé
    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 : 39
    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
    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 averti
    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
    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 confirmé
    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
    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 averti
    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
    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