Le faux bug du langage C !!![RESOLU]
Forum Programmation : Le faux bug du langage C !!![RESOLU]
Bonjours,
durant la création d'un jeu 2D genre mario j'ai employé dans une fonction une variable static et un return. Le return ne fermant pas la fonction la variable static prend une valeur aléatoire.
Pour contourner le bug il suffit d'attribuer une valeur à un variable dans la condition et de la retournée après l'avoir fermée
Aisse vraiment un bug ? . Si oui comment pervenir de ce bug ?
Voila le script :
<code type="c">SDL_Surface * saut( SDL_Surface *Perso, SDL_Surface *PersoDroite, SDL_Surface *PersoGauche, SDL_Surface *PersoFace, SDL_Surface *PersoDos, SDL_Rect *CooPerso, int *bSaut, int *bMonte, int nHauteurInitiale, int nVitesseSaut)
{
//Déclare les entiers
static int nTps1 = 0;
int nTps2 = 0;
fprintf(stderr, " %Ld\n", nTps1);
// Prends le temps actuel
nTps2 = SDL_GetTicks();
// Si ca fait plus de 30ms
if ( nTps2 - nTps1 > 30 )
{
// Si on a pas attiend la hauteur max et que l'on monte
if ( CooPerso->y > nHauteurInitiale - 50 && *bMonte)
// On monte le perso
CooPerso->y -= nVitesseSaut;
// Si on est en haut
else if ( CooPerso->y/nVitesseSaut == (nHauteurInitiale - 50)/nVitesseSaut && *bMonte )
// On descend
*bMonte = 0;
// Si on a pas atteind le sol et que l'on descend
else if ( CooPerso->y < nHauteurInitiale && !(*bMonte))
// On descend le perso
CooPerso->y += nVitesseSaut;
// Si on a réatteind le seul
else if ( CooPerso->y/nVitesseSaut == nHauteurInitiale/nVitesseSaut && !(*bMonte))
// On saute plus
*bSaut = 0;
if ( CooPerso->y == nHauteurInitiale )
Perso = PersoFace;
else if ( CooPerso->y == nHauteurInitiale - nVitesseSaut*2 )
Perso = PersoGauche;
else if ( CooPerso->y == nHauteurInitiale - nVitesseSaut*4 )
Perso = PersoDos;
else if ( CooPerso->y == nHauteurInitiale - nVitesseSaut*6 )
Perso = PersoDroite;
else if ( CooPerso->y == nHauteurInitiale - nVitesseSaut*8 )
Perso = PersoFace;
else if ( CooPerso->y == nHauteurInitiale - nVitesseSaut*10 )
Perso = PersoGauche;
// Redefinis nTps1
nTps1 = nTps2;
return Perso;
}
}
</code>
Merci de vos réponses à venir.
Et si tu mets le return ça marche ?
Quel compilateur utilises-tu ?
Faudrait voir sur un exemple simple la différence en regardant le code compilé en assembleur.
J'utilise Dev C++ en IDE donc le compilateur c'est mingw32 et plus precisement gcc car c'est du C.
Si je mets le return après l'acolade fermante la variable static fonctionne correctement. Sinon elle prend une valeur alèatoire.
Au niveau de regarder le resultat en assembleur, je ne suis pas capable de le faire. si tu pourrais le faire stp.
je ne comprends pas vraiment le sens de cette phrase :
| Citation : Le return ne fermant pas la fonction la variable static prend une valeur aléatoire. |
Ton code est de toute manière incorrecte.
Code :
|
Ta fonction ne renvoie pas forcement quelque chose ce qui est incohérent avec le prototype de ta fonction. De la à ce que ça décalle ta pile et que ta variable static en soit affecté ça ne m'étonne pas vraiment.
Ok bon ba maintenant je comprend mieu merci de votre aide. Le problème venais de la syntaxe erroné et pas du compilateur.
@+ et Merci encore
Il y a 2351 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
