CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Faire une variable globale en C, c'est grave ?

DébutPage précedente
12
Page suivanteFin
Pseudo supprimé
Niveau 8
21 avril 2019 à 15:16:37

Salut,
Je code en C en se moment et pour un de mes programmes c'est beaucoup plus simple de faire une variable globale plutôt que de passer par des locals dans les fonctions....
C'est vraiment treeeeeees grave ou sa peut passer de faire ça ?

no_lift_69 no_lift_69
MP
Niveau 10
21 avril 2019 à 15:38:52

donne l'exemple

Pseudo supprimé
Niveau 8
21 avril 2019 à 16:02:00

C'est assez complexe, en gros je code avec la sdl j'ai une boucle whille qui sert de boucle de gameplay au jeu.
Et dans cette boucle il y a une fonction qui sert a vérifié l'event en cours et dans cette fonction si je crée des variables elles seront réinitialiser à chaque itération de la boucle.
Donc j'ai fait passer un de mes variable en globale pour " pas me faire chié"

no_lift_69 no_lift_69
MP
Niveau 10
21 avril 2019 à 16:27:21

mmmouai

F-Bardamu F-Bardamu
MP
Niveau 10
21 avril 2019 à 18:56:15

Pour le coup ça a pas l'aire très compliqué de passé le paramètre de ta fonction par référence.
Juste une petite histoire de pointeur

MrAnge MrAnge
MP
Niveau 10
21 avril 2019 à 19:46:03

sinon les variables qui ne doivent pas être réinitialiser à chaque fois que tu rentre dans ta fonction tu les déclares en static

ça permet d'initialiser une seul et unique fois ta variable au lancement du programme et ensuite elle resterons à leur valeur en sortie de fonction

MrAnge MrAnge
MP
Niveau 10
21 avril 2019 à 19:52:53

Ah bah je peut plus editer :snif:

Je tient a dire que les variables global sont à évité car tu peut vite te retrouver a ne plus savoir où ta variable à été modifier pour la dernière fois et en cas de bug tu vas vouloir debugger, et la les vrais problème commence si ton code est un peu complexe et un peu long, car tu vas passer des heures à chercher où est modifier ta variables et quelle fonction fait que sa déconne

blackapplex blackapplex
MP
Niveau 10
21 avril 2019 à 19:55:34

C'est vraiment treeeeeees grave ou sa peut passer de faire ça ?

Ca n'a rien de grave, il faut simplement comprendre pourquoi tu le fais, pourquoi c'est plus génant de faire autrement, et qu'est-ce que ça implique en terme de mémoire, de restructuration s'il fallait s'en passer, est-ce que c'est possible que t'ais à le faire pour une prochaine variable, puis une autre, puis une autre? etc.

La programmation nous permet de faire plein de chose, aucune n'est mauvaise par défaut, l'important c'est de comprendre.

Message édité le 21 avril 2019 à 19:55:48 par blackapplex
EsclaveFoodora EsclaveFoodora
MP
Niveau 8
21 avril 2019 à 20:09:55

Les variables globales sont à bannir, excepté dans le cas où elles sont nécessaire et où on peut pas faire sans :(

Si c'est un petit prog d'entrainement ça va, y a pas mort d'homme, mais si tu peux trouver une solution sans, essaye, ça te fera bosser en plus la syntaxe du C :ok:

godrik godrik
MP
Niveau 22
21 avril 2019 à 21:48:35

De facon general, la question d'utiiser des variables globales ou non est une question d'ingenirie logicielle.
Quand une variable est lobale, elle devient accessible de partout. Ca veut dire qu'il devient plus difficile de traquer de qui va changer cette variable ou ce qui ne va pas la changer. Ca veut dire que les fonctions qui l'utilisent sont sensibles aux effet de bords. Ca les rends plus difficile a debugger par exemple.

Est ce que ca veut dire qu'il ne faut jamais les utiliser? Pas forcement. Mais si il y a une facon simple de s'en passer, il est preferable de s'en passer. En d'autre terme, a mon sens, il faut une raison solide pour les utiliser.

De facon general dans mes cours, les etudiants qui utilisent des variables globales sans bonne raison perdent des points dans la categorie "ingenierie logicielle".

Sidomaster Sidomaster
MP
Niveau 6
25 avril 2019 à 02:26:05

Ton sujet t'interdit les variables globales ?

Au pire go singleton ! :cute:

89ron 89ron
MP
Niveau 10
25 avril 2019 à 09:15:28

Singleton en C ? rendors-toi...

Sidomaster Sidomaster
MP
Niveau 6
25 avril 2019 à 11:24:34

Le 25 avril 2019 à 09:15:28 89ron a écrit :
Singleton en C ? rendors-toi...


int SingletonEnC() {
     // La variable static sera défini au premier appel (ensuite cette ligne est skippé)
     static int instance = 42;
     // Renvoie de la var
     return instance;
 }

Tu mets la variable en static dans une fonction et tu l'a récupères quand tu en a besoin par un appel (on est d'accord c'est un peu moins opti car il y a le coût de l'appel)
Tu peux aussi faire ça avec des pointeurs, struct, etc.

Les singletons en c existent... :cute:

lokilok lokilok
MP
Niveau 10
25 avril 2019 à 11:28:51

C'est pas un singleton ça, c'est une globale constante.

MrAnge MrAnge
MP
Niveau 10
25 avril 2019 à 12:45:31

Bon c'est plus vraiment le sujet mais ça m’intéressais d'essayé ce singleton en C, et je dirais que du coup ça devrais ressembler à ceci :

int *SingletonEnC()
{
	static int instance = 42;
	
	return &instance;
}

int main(void) {
	// your code goes here
	int *toto = 0;
	
	toto = SingletonEnC();
	
	*toto = 53;
	
	printf("%ld", *SingletonEnC());
	
	return 0;
	
}

Sans ce post j'y aurais jamais pensé (bon après tous j'ai jamais eu besoin de singleton en C) m'enfin sa reste intéressant :hap:

lokilok lokilok
MP
Niveau 10
25 avril 2019 à 13:17:24

C'est pas parce que tu mets ta variable globale dans une fonction que ça en devient un singleton, un singleton c'est une classe que tu ne peux instancier qu'une fois, je vois pas trop le rapport dans ce cas là.

MrAnge MrAnge
MP
Niveau 10
25 avril 2019 à 13:30:02

le fait de mettre la variable en static fait qu'elle ne s'instancie qu'une seule et unique fois.

Le fait de passer l'adresse de la variable en retour de fonction permet de la récupérer et de la setter en dehors.

sachant que la on a pris l'exemple avec une variable toute simple mais tu pourrais très bien retourner l'adresse d'une structure

si jamais tu as envie tu peut essayé le morceau de code que j'ai mit plus haut sur ideone.

Pour moi un singleton n'as vraiment d’intérêt que pour une classe (permettre l'appel à des méthode en gérant les donnés dans une seul et unique instance pour éviter de te retrouver avec des incohérence).
Donc en C aucun intéret je suis bien d'accord, enfin on pourrais toujours pousser le truc pour rajouter des pointeurs sur fonction dans l'instance du "Singleton" mais la c'est plus de mon niveau :hap:

lokilok lokilok
MP
Niveau 10
25 avril 2019 à 19:01:55

le fait de mettre la variable en static fait qu'elle ne s'instancie qu'une seule et unique fois.

Oui mais encore une fois c'est pas ça un singleton, le but d'un singleton c'est de pouvoir avoir une seule instance d'une classe, d'un type si tu veux, là ton int tu peux en déclarer autant que tu veux ce que tu as fais n'y change rien, et si ça avait été une structure à la place d'un int ça aurait été pareil tu aurais quand même pu l'instancier autant de fois que tu veux.

Là c'est juste une globale que tu as.

Message édité le 25 avril 2019 à 19:02:05 par lokilok
MrAnge MrAnge
MP
Niveau 10
25 avril 2019 à 19:11:01

Le 25 avril 2019 à 19:01:55 lokilok a écrit :
Oui mais encore une fois c'est pas ça un singleton, le but d'un singleton c'est de pouvoir avoir une seule instance d'une classe, d'un type si tu veux, là ton int tu peux en déclarer autant que tu veux ce que tu as fais n'y change rien, et si ça avait été une structure à la place d'un int ça aurait été pareil tu aurais quand même pu l'instancier autant de fois que tu veux.

Là c'est juste une globale que tu as.

Je pense que je comprend ce que tu veux dire. Par contre je comprend pas comment tu pourrais le mettre en oeuvre, est ce que tu aurais un morceau de code (relativement simple) qui permettrait d'instancier deux fois la variables ?

Edit : parce que la le problème c'est qu'on aurais pas de constructeur privé. Par contre y'a pas de class en C ce ne sont que des fonctions donc on fait des appels pas des instanciations, c'est la où du coup j'ai du mal à comprendre pourquoi on pourrais instancié deux fois la variable dans la fonction.

Message édité le 25 avril 2019 à 19:14:13 par MrAnge
lokilok lokilok
MP
Niveau 10
25 avril 2019 à 19:12:26

Bah tu déclares un int ailleurs et pouf t'as une nouvelle instance, ton int est pas un singleton.

DébutPage précedente
12
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment