Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [C / C++ / C#] » Visibilité de variable étrange...
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Visibilité de variable étrange...
Noda
Membre hyperactif
Membre # 22404

 
Lieu : Echirolles

Messages :
286 (0.07 par jour)


Voter pour ce membre

Message du 12-09-2006 @ 0:56      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


J'ai une question pour les pros du C, sur un truc qui m'échappe:

en gros mon code ca fait un truc du genre:

{
-> declaration + initialisation d'un tableau
-> je met un pointeur vers ce tableau dans une structure

> while(1) {
-> appelle le moteur du jeu (une fonction qui recoit la structure en param), qui lui meme appelle le fonction (on va dire Z) utilisant le pointeur du tableau pour lire dans celui-ci
}
}

si je ne déclare pas mon tableau en static, dans Z le tableau y'a nimp' dedans...

sachant que static sert à pouvoir utiliser les variables locales en dehors du bloc local, mais l'on voit bien dans mon exemple que je ne sors pas du bloc local justement!!! d'ou mon interrogation, si quelqu'un pouvait m'éclairer...

merci
----------
Xigmatek Midgard /Asus P7P55D / Core i5 750 / Sapphire 5850 / G.Skill Ripjaws 4Go DDR3 / WD Green 1To
Apple Macbook Air 2012 13" i5 1.8Ghz / 8Go RAM / 256Go SSD
Asus 1005HA-H 10" 1.66Ghz / 1Go RAM / 160Go HD
Apple iPad 32Go / iPhone 4S 16Go / Nexus 4 16Go
- Haut de page -
Caedes
Sage
Membre # 244

 
Lieu : Stoumont / Liège, Belgique

Messages :
1092 (0.17 par jour)


Score :

Message du 12-09-2006 @ 7:45   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Normalement ca doit fonctionner sans static.
Met un peu de code qu'on voit le problème (déclaration, passage du tableau, etc.)

----------
Satellite Pro 2100 : P4m 1.7Ghz, 768 DDR, 15" XGA, GF4 420 Go (32 DDR), 30Go, DVD-CDRW
- Haut de page -
Caedes
Sage
Membre # 244

 
Lieu : Stoumont / Liège, Belgique

Messages :
1092 (0.17 par jour)


Score :

Message du 12-09-2006 @ 8:03   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

et static n'augmente pas la portée de la déclaration de la variable, mais elle garantit qu'a chaque éxécution de ta fonction (dans le cas d'une variable locale) c'est la meme variable (i.e. elle ne sera pas ré-initialisée) qui est utilisée.

static dans le cas d'une variable globale, ca réduit même la portée au fichier .c dans lequel elle est déclarée...
----------
Satellite Pro 2100 : P4m 1.7Ghz, 768 DDR, 15" XGA, GF4 420 Go (32 DDR), 30Go, DVD-CDRW
- Haut de page -
Noda
Membre hyperactif
Membre # 22404

 
Lieu : Echirolles

Messages :
286 (0.07 par jour)


Voter pour ce membre

Message du 12-09-2006 @ 10:03   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Code :

int i, j;
u16 width = 38, height = 24;

// Init monsters space
// u8 m_path[width*height];
static u8 m_path[38*24];
for(j = 0; j<height; j++)
for(i = 0; i<width; i++)
if(epath[j][i] == 0)
m_path[i+j*width] = 0;//1
else
m_path[i+j*width] = 0;


map td1 = {
....
m_path, // monsters space
....
}

initEngine(&td1);

// Main loop
while (!engineActions())
{
PA_WaitForVBL();
}

}



initEngine, je copie le pointeur vers td dans une variable globale se trouvant dans engine.c, qu'utilise la fonction engineAction();

celle ci contient une fonction monstersAI() qui appelle ma fonction pathfinding(... u8* td ...) à qui je passe ce pointeur en paramètre pour qu'elle puisse lire dans le tableau.

Je précise aussi que je développe sur Nintendo DS, même ca ne doit rien changer normalement...
----------
Xigmatek Midgard /Asus P7P55D / Core i5 750 / Sapphire 5850 / G.Skill Ripjaws 4Go DDR3 / WD Green 1To
Apple Macbook Air 2012 13" i5 1.8Ghz / 8Go RAM / 256Go SSD
Asus 1005HA-H 10" 1.66Ghz / 1Go RAM / 160Go HD
Apple iPad 32Go / iPhone 4S 16Go / Nexus 4 16Go
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.24 par jour)




Message du 15-09-2006 @ 17:04   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

à mon avis cela viens d'un conflit de nommage: le nom du parametre de l'une de tes fonctions (initEngine ou pathFinding) doit etre le meme que celui de la variable globale. Il crée donc une nouvelle variable non initialisée et qui pointe n'importe ou d'ou le contenu bizarre.( et d'ou la disparition du probleme quand tu déclare la variable en static)
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -
Noda
Membre hyperactif
Membre # 22404

 
Lieu : Echirolles

Messages :
286 (0.07 par jour)


Voter pour ce membre

Message du 26-09-2006 @ 18:58   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

le truc c que'il n'y a pas de variable globale à la base, puisque les poinsteurs vers mes tableaux sont passé par paramètre :/

mais bon, je survivrai avec mes static tant pis :)
----------
Xigmatek Midgard /Asus P7P55D / Core i5 750 / Sapphire 5850 / G.Skill Ripjaws 4Go DDR3 / WD Green 1To
Apple Macbook Air 2012 13" i5 1.8Ghz / 8Go RAM / 256Go SSD
Asus 1005HA-H 10" 1.66Ghz / 1Go RAM / 160Go HD
Apple iPad 32Go / iPhone 4S 16Go / Nexus 4 16Go
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.24 par jour)




Message du 28-09-2006 @ 19:40   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Ce n'est pas parce que tu passes tes paramètres par adresse, que tu n'as aucune déclaration de variable globales. Même si c'est pas avec une variable globale, je pense queca reste quand même un conflit de nommage.
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.046 secondes