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 :

Prototype d'une variable, ça existe ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Par défaut Prototype d'une variable, ça existe ?
    Bonjour tout le monde,

    Est-il possible de déclarer une variable comme on le fait quand on déclare une fonction avec son prototype ?

    Merci.
    A+, Pierre.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Je vois pas bien ce que tu veux dire, tu déclares une variable de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type identifiant [initialisation]
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pierre.g
    Est-il possible de déclarer une variable comme on le fait quand on déclare une fonction avec son prototype ?
    Oui, mais, bien que techniquement possible, l'usage des variables dites 'globales' doit rester rare est doit être justifié dans le cadre d'une Bonne Programmation.

    http://emmanuel-delahaye.developpez....s.htm#globales

    Evidemment, si on code somme un sagouin, je ne répond plus de rien...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Par défaut
    C'est pour utiliser le handle d'une fenêtre que j'utilise dans beaucoup de fonctions, pour ne pas avoir à chaque fois à le donner en argument, c'est plutôt sagouin ou pas ?

    Sinon ça marche.

    Merci beaucoup.
    A+, Pierre.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Pierre.g
    C'est pour utiliser le handle d'une fenêtre que j'utilise dans beaucoup de fonctions, pour ne pas avoir à chaque fois à le donner en argument, c'est plutôt sagouin ou pas ?
    Bin disons que les arguments servent justement à éviter autant que possible les globales, donc si c'est rien que le fait de devoir le passer en paramètre sur plusieures fonctions je dirais n'utilise pas les globales.

    Ce que je fait par contre quand j'ai presque pas le choix d'utiliser une globales ou si c'est une meilleure alternative, j'utilise une méthode qui est largement utilisée en POO soit, mettre la variable en privée au module où elle est déclarée et mettre en publique deux fonctions: un accesseur et un modificateur (setter et getter). Je trouve que c'est plus propre comme ca !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Pierre.g imagine que tes fonctions peuvent maintenant travailler sur d'autres fenêtres, tu vas devoir refactorer tout ton code afin qu'elles puissent utiliser le handle de la fenêtre qui devra afficher le résultat.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par swirtel
    Pierre.g imagine que tes fonctions peuvent maintenant travailler sur d'autres fenêtres, tu vas devoir refactorer tout ton code afin qu'elles puissent utiliser le handle de la fenêtre qui devra afficher le résultat.
    +1

    Y'en a au moins un qui suit, ça fait plaisir...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Franck.H
    Ce que je fait par contre quand j'ai presque pas le choix d'utiliser une globales ou si c'est une meilleure alternative, j'utilise une méthode qui est largement utilisée en POO soit, mettre la variable en privée au module où elle est déclarée et mettre en publique deux fonctions: un accesseur et un modificateur (setter et getter). Je trouve que c'est plus propre comme ca !
    Mauvaise réponse à un vrai problème.

    Je pense que la POO n'a certainement pas été inventée pour cacher les variables persistantes, mais au contraire pour permettre l'instanciation des objets utilisant les mêmes méthodes.

    Le principal problème des variables globales n'est pas qu'elles soient de portée globales, mais surtout qu'elles soient uniques, donc non instanciables. Elles 'pourrissent' le code en le figeant et en le rendant non réentrant.

    La POO, au contraire cherche à utiliser au maximum l'instanciation (pas forcément dynamique, d'ailleurs), donc les contextes (this), ce qui permet de bénéficier des avantages de la persistance, sans les inconvénients, à savoir la non-instanciabilité et la non-réentrance.

    Une des réponse du C à ce problème est :

    http://emmanuel-delahaye.developpez.com/tad.htm
    http://emmanuel-delahaye.developpez.com/comp_log.htm

    Ces principes sont largement utilisés dans des bibliothèques 'intelligentes' comme GTK+, SDL voire l'API Win32 etc.

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Le principale problème des globales n'est pas qu'elles soient de portée globales, mais surtout qu'elles soient uniques, donc non instanciables. Elles 'pourrissent' le code en le figeant et en le rendant non réentrant.

    La POO, au contraire cherche à utiliser au maximum l'instanciation (pas forcément dynamique, d'ailleurs), donc les contextes (this), ce qui permet de bénéficier des avantages de la persistance, sans les inconvénients, à savoir la non-instanciabilité et la non-réentrance.
    Oui ... j'avais pas vu ca sous cet angle effectivement ...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pierre.g
    C'est pour utiliser le handle d'une fenêtre que j'utilise dans beaucoup de fonctions, pour ne pas avoir à chaque fois à le donner en argument, c'est plutôt sagouin ou pas ?
    Non, c'est plutôt goret...
    Sinon ça marche.
    comme du code jetable (quick'n dirty). Au prix que ça coute, on favorise le recyclage...

    En informatique, on parle de réutiliser le code. Mais pour ça, il doit être dans les règles de l'art. L'une d'entre elles est : pas de globales.

    Et contrairement à ce qu'on lit parfois, la reutilisabilité du code n'est pas une question de langage, mais de méthode de travail. Le C++ permet d'écrire du code aussi jetable que le C. Le C permet d'écrire du code aussi réutilisable que le C++.

  11. #11
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je trouve que c'est très catégorique tout ça...

    Si on déconseille fortement les variables globales, c'est essentiellement pour éviter des effets de bord se propageant entre fonctions.

    Pour ma part, je déconseille, bien-sûr, ce genre de technique, mais parfois elle peut avoir un sens, par exemple si on fournit un module dont le comportement des fonctions peut être paramètré par l'utilisateur.

    Il y a un exemple qui me vient à l'esprit, et c'est celui du Garbage Collector d'Objective Caml. Les différentes phases, ainsi que l'efficacité du mécanisme est contrôlé par des variables possédant, bien-sûr, une valeur de départ, mais pouvant aussi être ajustées par l'utilisateur. C'est bien-sûr une utilisation avancée, et certainement le plus propre est de fournir des fonctions "getter" et "setter" comme dit plus haut pour se prémunir de valeurs incorectes.

    De nombreuses classes Java possèdent également des variables globales, et personne n'y trouve rien à redire.

    Comme toujours, je pense qu'i ne faut pas être dogmatique, car celà peut mener dans certains cas à opter pour des solutions compliquées qui sont finalement inadaptées au cas présent.

    Il suffit, mais surtout il faut, choisir la meilleure solution.

  12. #12
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En informatique, on parle de réutiliser le code. Mais pour ça, il doit être dans les règles de l'art.
    Petite question : que penses-tu de Donald Knuth ?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 256
    Par défaut
    Oula, vous êtes partis sur des notions que je n'ai pas ... je commence la programation et c'est un peu complexe.

    C'est un petit programme que je suis en train de faire, et je pense qu'utiliser une variable globale est simple à faire et assez adapté, donc pour l'instant je vais garder ça.

    Je verrais peut être ça autrement plus tard.

    Merci et à plus tard.
    Pierre.

Discussions similaires

  1. [EasyPHP] warning si une variable n'existe pas
    Par gianni7033 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 22/09/2010, 17h59
  2. Réponses: 3
    Dernier message: 19/08/2005, 14h24
  3. Tester si une variable passé en url existe
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/08/2005, 14h06
  4. Réponses: 3
    Dernier message: 05/04/2005, 14h36
  5. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30

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