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 :

bien écrire en c/c++


Sujet :

C++

  1. #21
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Je pense qu'il s'agit d'un raccourci, voire d'un abus de langage. Mais au final on se comprend tous.

    Pour moi, int a; est une déclaration de variable, alors que class A; est une déclaration de type. Mais déclarer un type ne suffit pas à l'utiliser, il faut aussi qu'il soit défini.
    extern étant à part puisqu'il s'agit uniquement d'indiquer que oui, cette variable existe, d'en donner la nature, mais de ne pas se soucier d'où elle vient.

    Après, le fait est qu'en C++ toute variable déclarée est initialisée (je préfère ce terme à "définie", on déclare et initialise une variable, on déclare et définit un type) immédiatement. Avec des valeurs aléatoires pour les types par défaut, le constructeur par défaut pour class et struct.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  2. #22
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    J'ai encore foiré avec mes exemples...

    Le but était surtout de dire que déclaration, définition et initialisation sont 3 concepts différents, même si parfois (souvent), on fait plusieurs choses en même temps :
    * déclaration : déclarer un nouveau "mot" au compilateur, pour qu'il sache qu'il existe ensuite
    * définition : dire à quoi correspond un "mot" (ie le contenu de son type)
    * initialisation : donner une valeur à un "mot"

    Faudrait que je retrouve les définitions exactes dans la norme (si c'est bien dans la norme)... (ou attendre que Flob90, qui a appris par coeur la norme, passe dans le coin)

  3. #23
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    J'apprécie l'autre choix de vocabulaire, je trouve qu'il colle mieux avec la vie courante.

    Lorsqu'on déclare quelque chose, on ne fait que dire "je l'ai", exactement comme lorsqu'on déclare ses revenus, on n'envoie pas un relevé de compte…

    De même une définition donne du sens au défini. C'est le principe même d'un dictionnaire.
    On a alors la possibilité de la définition par défaut, c'est à dire "comme tu t'y attends", avec le fait que tu ne t'attends à rien de précis que je dis "un entier".

    Edit: zut, doublé par gbdivers

  4. #24
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut
    Tout çà est bien enregistré.
    Et on ne devrait plus avoir de mauvais écrivains.
    Hug!

  5. #25
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Une autre différence importante entre déclaration et définition est l'unicité. Tu ne peux définir une variable qu'une seule fois dans un programme, tu ne peux définir une fonction non inline qu'une seule fois dans un programme, tu ne peux définir un type qu'une seule fois dans une unité de compilation (mais dans le programme, chaque définition doit être la même)... (c'est ce qu'on nomme la One definition rule). Tu peux déclarer toutes ces choses autant de fois que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    extern int a; // déclaration
    extern int a; // déclaration
    extern int a; // déclaration
    extern int a; // déclaration
    int a; // Définition
    int a; // Erreur : Redéfinition
    La définition dans la norme de déclaration/définition est dans le 3.1, mais ce n'est pas très agréable à lire, et ne décrit pas la philosophie qu'il y a derrière :
    A declaration (Clause 7) may introduce one or more names into a translation unit or redeclare names introduced by previous declarations. If so, the declaration specifies the interpretation and attributes of these names. A declaration may also have effects including:
    — a static assertion (Clause 7),
    — controlling template instantiation (14.7.2),
    — use of attributes (Clause 7), and
    — nothing (in the case of an empty-declaration).
    2 A declaration is a definition unless it declares a function without specifying the function’s body (8.4), it contains the extern specifier (7.1.1) or a linkage-specification25 (7.5) and neither an initializer nor a functionbody, it declares a static data member in a class definition (9.2, 9.4), it is a class name declaration (9.1), it is an opaque-enum-declaration (7.2), it is a template-parameter (14.1), it is a parameter-declaration (8.3.5) in a function declarator that is not the declarator of a function-definition, or it is a typedef declaration (7.1.3), an alias-declaration (7.1.3), a using-declaration (7.3.3), a static_assert-declaration (Clause 7), an attributedeclaration (Clause 7), an empty-declaration (Clause 7), or a using-directive (7.3.4).
    Et, puisqu'on est en mode chipotage :
    Formellement, l'effet n'est pas de mettre une valeur aléatoire dans j, mais ce code est un comportement indéfini, le compilateur est en droit lors de l'exécution de rédiger en vers et en espéranto une lettre d'injure et de la mailer au patron/professeur/autre du codeur responsable, ou toute autre action qu'il jugera utile
    En pratique, sur certaines architecture, on pourra avoir plantage si la "valeur" initiale ne correspond pas à une valeur valide pour le type concerné.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/04/2009, 17h48
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. Initialisation (ou bien écrire du code)
    Par boijea dans le forum Langage
    Réponses: 16
    Dernier message: 24/11/2008, 12h40
  4. Conseils pour bien écrire les classes ado.net
    Par azerty53 dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/05/2007, 17h24
  5. Bien écrire en C
    Par Gruik dans le forum C
    Réponses: 13
    Dernier message: 30/05/2006, 10h02

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