Logo du forum
 

Forum TT-Hardware

| 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

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

Auteur
Sujet : Visibilité de variable étrange...
Noda



 






Message du 12-09-2006 @ 0:56


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
- Haut de page -
Caedes



 






Message du 12-09-2006 @ 7:45

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

- Haut de page -
Caedes



 






Message du 12-09-2006 @ 8:03

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...
- Haut de page -
Noda



 






Message du 12-09-2006 @ 10:03

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...
- Haut de page -
bambino



 






Message du 15-09-2006 @ 17:04

à 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)
- Haut de page -
Noda



 






Message du 26-09-2006 @ 18:58

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 :)
- Haut de page -
bambino



 






Message du 28-09-2006 @ 19:40

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.
- Haut de page -

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2006

Valid XHTML 1.0 Transitional

Page générée en 0.076 secondes