GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 15 Octobre 2010, 22:24:45

Titre: Oubli d'un nom de fonction
Posté par: scott1 le 15 Octobre 2010, 22:24:45
Bonsoir à toutes et à tous,

J'ai oublier comment on appelais une fonction qui commençait par


for(new i = 0; i != sizeof(X); i++ )

Merci d'avance
Titre: Re : Oubli d'un nom de fonction
Posté par: Ssk le 15 Octobre 2010, 22:31:40
J'ai pas très bien compris ^^
Titre: Re : Oubli d'un nom de fonction
Posté par: dydjyz le 15 Octobre 2010, 22:54:49
Une boucle ?
Titre: Re : Oubli d'un nom de fonction
Posté par: Ssk le 16 Octobre 2010, 11:34:58
Faux, sizeof() donne la taille que la variable prend dans la mémoire en octets, mais en pawn cette fonction ne donne pas la valeur exacte.

Exemple:

new var = 5;
printf("Taille dans la mémoire de var = %d\n", sizeof( var ) );

cela affiche -> Taille dans la mémoire de var = 1

Ce qui est normalement faux, vu qu'une variable en pawn est ( presque ? ) toujours en 4octets ( 32bits ), donc normalement cela devrai affiché

Taille dans la mémoire de var = 4

alors qu'en C

Code: (cpp) [Sélectionner]
int main( int argc, char ** argv )
{
int var = 5;
printf("Taille dans la mémoire de var = %d\n", sizeof( var ) );
system( "pause" );
return 0;
}

on obtient


Taille dans la mÚmoire de var = 4
Appuyez sur une touche pour continuer...


et si on fait

new var[4] = {5, 4, 3, 2};
printf("Taille de var dans la mémoire %d\n", sizeof( var ) );

ce code affiche -> Taille de var dans la mémoire 4


alors qu'en C
int main( int argc, char ** argv )
{
int var[4] = {5, 4, 3, 2 };
printf("Taille dans la mémoire de var = %d\n", sizeof( var ) );
system( "pause" );
return 0;
}

ce code affiche:

Taille dans la mÚmoire de var = 16
Appuyez sur une touche pour continuer...



donc, on voit qu'en pawn, sizeof() divise par 4 la taille de la variable dans la mémoire, et je n'ai jamais compris pourquoi ^^
Titre: Re : Oubli d'un nom de fonction
Posté par: scott1 le 16 Octobre 2010, 13:46:00
Voila s'est une boucle, ce qui était a l'interieur s'était n'importe quoi ^^
Titre: Re : Oubli d'un nom de fonction
Posté par: Ssk le 16 Octobre 2010, 13:50:45
On appel pas ça une fonction, mais une instruction, voila pourquoi je n'ai pas compris ^^
Titre: Re : Re : Oubli d'un nom de fonction
Posté par: Bayshore le 16 Octobre 2010, 14:25:41
donc, on voit qu'en pawn, sizeof() divise par 4 la taille de la variable dans la mémoire, et je n'ai jamais compris pourquoi ^^

Sans doute pour éviter à tout le monde de s'emmerder à diviser par 4 à chaque fois.
Titre: Re : Oubli d'un nom de fonction
Posté par: Ssk le 16 Octobre 2010, 14:44:50
Ouais, peut être, mais ça emmerde pas de diviser par 4, il y a juste à écrire /4
Titre: Re : Re : Oubli d'un nom de fonction
Posté par: S!m le 16 Octobre 2010, 16:06:15
Salut,

Ouais, peut être, mais ça emmerde pas de diviser par 4, il y a juste à écrire /4

et en plus le code n'en est pas plus lent comme en PAWN (en C/++ aussi j'imagine), la valeur de sizeof est déterminée à la compilation, donc constante. Or les opérations sur les constantes (tel que sizeof()/4, MAX_PLAYERS/100) sont calculées à la compilation (si le compilo est moindrement "bon", normalement il optimise de quelques façons et ceci en fait partie).

++Sim++