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.
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.
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 !
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.Envoyé par Pierre.g
http://emmanuel-delahaye.developpez....s.htm#globales
Evidemment, si on code somme un sagouin, je ne répond plus de rien...
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.
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.Envoyé par Pierre.g
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 !
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.
+1Envoyé par swirtel
Y'en a au moins un qui suit, ça fait plaisir...
Envoyé par Franck.H
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.
Oui ... j'avais pas vu ca sous cet angle effectivement ...Envoyé par Emmanuel Delahaye
![]()
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 !
Non, c'est plutôt goret...Envoyé par Pierre.g
comme du code jetable (quick'n dirty). Au prix que ça coute, on favorise le recyclage...Sinon ça marche.
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++.
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.
Petite question : que penses-tu de Donald Knuth ?Envoyé par Emmanuel Delahaye
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.
Partager