CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • 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 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] variable sans valeure

-MasterLink-
-MasterLink-
Niveau 6
25 novembre 2007 à 20:04:31

Salut

Je passe de nouveau pour une petite question au niveau de test de variable. C´est de nouveau par curiosité et non par besoin, donc une solution qui n´est pas de mon niveau me convient aussi, juste pour savoir si c´est possible quoi :-d .
Je me demandais s´il était possible de tester si une variable n´avait pas de valeure assignée.
Donc un truc du genre

int test;
if (test == ) test = 1;

Donc verifier si test est déclaré, mais n´a aucune valeure d´assigné

Merci d´avance

guyver2
guyver2
Niveau 10
25 novembre 2007 à 20:41:24

non ça ne marche pas comme ça.

quand tu fait
int test;

test contient quelquechose, mais tu n´a pas moyen de savoir quoi a priori.

essaye de faire un printf("test = %d", test); tu vera bien que tes varaibles ont une valeur sans que tu leur en ai donner une.

et le if(test ==) n´est pas possible.

Prend l´habitude de TOUJOURS initialiser tes variables.

sangohan55
sangohan55
Niveau 10
25 novembre 2007 à 21:09:11

une variable déclarée comme ceci :

int maVariable;

prend comme valeur, la valeur precedente de sa case en mémoire.

--> aucun intêret

-MasterLink-
-MasterLink-
Niveau 6
25 novembre 2007 à 21:36:16

Donc si j´ais une fonction de genre

void button()
{
int test = 0;
int test2 = 0;
if (bouton[0] == 1 && test2 == 0)
{
test = 1;
test2 = 1;
}
if (bouton[0] == 0) test2 = 0;
test = 0;
}

C´est un exemple, mais le but serais que test soit egal a 1 seulement lors de l´appui du bouton. Donc dans cet exemple, test2 sert a verifier si l´on vient d´appuyer sur le bouton ou non. Mais comme je le déclare dans la fonction et que je teste sa valeure tout de suite après, je suis obligé de l´initialiser a 0, or si je le met a 0, il le sera a chaque passage de la boucle, et donc il n´a plus aucun interet puisqu´il faut garder la valeure du passage précédent.

Donc dans cet exemple, est-ce que je serais obligé de déclarer la variable en global pour ne l´assigner a 0 qu´au lancement de l´appli, ou y a-t-il un moyen pour indiquer qu´on ne veut le mettre a 0 seulement au premier passage de la boucle?

dnob700
dnob700
Niveau 10
25 novembre 2007 à 22:00:54

tu peut déclarer la variable globale si elle est utile ailleurs que dans cettefonction. Si tu ne t´en sers que dans cette fonction, il faut la déclarer avec le mot clef static :

void button()
{
static int test = 0;
...

Au premier appel de la fonction la variable vaut 0, et après elle gardera la valeur qu´elle avait la fois d´avant.

Il faut noter que pour le compilo, le code produit est exactement le même que si la variable était globale, mais c´est juste plus propre car elle n´est plus acessible là où elle ne doit pas l´être.

-MasterLink-
-MasterLink-
Niveau 6
25 novembre 2007 à 22:56:35

Ok cool c´est ce que je voulais savoir

Merci

pilo1488
pilo1488
Niveau 10
26 novembre 2007 à 10:26:05

par contre ton code marchera pas si tu as plusieurs boutons.. (car tu aura une seul variable test pour tout le monde).

La solution est d´utiliser une structure pour boutton qui contient les infos propres a un boutton (pressé ou non etc).

-MasterLink-
-MasterLink-
Niveau 6
26 novembre 2007 à 20:23:18

Je pensais plutot mettre le bouton testé en argument et tester s´il est pressé en temps voulu, donc un par un, mais bon je ne sais pas quelle solution est mieux... :-d

Par contre je voulais savoir, pour le static int test2=0;
Si test2 était un tableau, comment je devrais faire pour initialiser toutes les valeures du tableau a 0 en une ligne?
Je devrais passer par une boucle for?

dnob700
dnob700
Niveau 10
26 novembre 2007 à 21:10:19

si tu connais la longueur de ton tableau et qu´il n´estpas trop long, tu peut écrire :
static int tableau[5] = {0,0,0,0,0};
sachant que tu peut aussi écrire :
static int tableau[] = {0,0,0,0,0};

Car le compilo trouve tout seul la taille dutableau, mais c´est moins propre (surtout pour un truc qui n´est pas une chaîne de caractère et dont rien ne marque na fin du tableau).

D´autre part, je crois, mais je ne suis pas sûr (là il faut vérifier) qu´une variable static, y compris un tableau, est initialisée à zéro (et cela, de manière assuré par le compilo, pas juste "en règle général"). Si c´est vrai, tu n´a pas de problème.

Je me demande d´ailleurs ce qui l´en est pour une instance de classe. Quand est-ce que son constructeur est appelé ? au démarrage du programme (ça me semble pas très propre) ? au premier appel de la fonction (ça ne me semble pas très facile à réaliser sans perte de performance) ?

Si ce que j´ai dit au dessus est faux et que ton tableau est long, alors oui, il te faut une boucle for, mais fait attention qu´elle ne soit pas appelé à chaque appel dela fonction où le tableau est déclaré static.

-MasterLink-
-MasterLink-
Niveau 6
26 novembre 2007 à 21:29:04

Okay merci pour les info :-d , il me reste juste une petite question d´ordre pratique

un tableau int test[2] contient bien 3 valeure (test[0], test[1] et test[2]), alors pourquoi lorsque je fait int test[2] = {0,0,0} le compilo gueule et me demande de supprimer un 0?

dnob700
dnob700
Niveau 10
26 novembre 2007 à 22:34:35

parce que int test[2] ne contient que deux valeurs : test[0] et test [1]. Donc le compilo a raison.

godrik
godrik
Niveau 30
27 novembre 2007 à 00:05:24

en C ANSI, les "variables extern et static" sont initialisés à 0 (K&R p40).

En C++, les variables globales sont initialisés a début du programme (avant main). Les variables locales sont initilisées lorsque l´on rentre dans leur bloc.

dnob700
dnob700
Niveau 10
27 novembre 2007 à 20:42:08

mais quel est le code généré par le compile qui va initialiser une instance de classe static dans une fonction ? à chaque appel de la fonction il va regarder si c´est le premier appel ?

godrik
godrik
Niveau 30
27 novembre 2007 à 22:19:48

j´allais dire que ca devait etre fait au debut aussi.
mais a priori rien n´empeche d´utiliser un parametre de la fonction pour construire l´objet. Il faudrait que je parcours mon stroustrup...

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment