Diferencias: static - new.
#1

Hola,
їquй diferencias hay entre static o new?, dependiendo de cуmo se use, ya sea de modo global, en una funciуn o comando.

Dejarй un ejemplo:

Код:
CMD:quitararmas(playerid, params[])
{
	if(PlayerInfo[playerid][jAdm] == 0) return SCM(playerid, COLOR_GRAD, "Necesitas ser administrador para usar este comando.");
    if(sscanf(params, "r", params[0])) return SCM(playerid, COLOR_LABELS, "Modo de uso: /quitararmas [ID]");
	if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GRAD, "El jugador seleccionado no estб conectado.");
	ResetPlayerWeapons(params[0]);
    static string[128]; // o new.
	format(string, sizeof(string), "El administrador %s te a quitado las armas.", NombreJugador(playerid));
	SCM(params[0], COLOR_VERDE_CLARO, string);
	format(string, sizeof(string), "Has quitado las armas a %s.", NombreJugador(params[0]));
	SCM(playerid, COLOR_VERDE, string);
	return 1;
}
Aclaro, que si llegase a ser mejor (se que lo es) las variables globales en static, їcuбles son los factores que tenga йste que no tenga new? (no pretendo reiniciar servidor, aclaro)

Espero darme a comprender, gracias por leer.
Reply
#2

Las variables "static" no se liberan de la memoria, es lo mismo que en C++. Se recomiendo definir las variables globales en "static" y variables locales solo deben ser definidas con "static" cuando son llamadas constantementes, "new" se libera de la memoria una vйz que ya lo es utilizada.

PD: Recuerde que utilizar static consume mбs memoria pero no es de asustarse porque de igual manera no es que le consume tanta memoria solo que mбs que "new".

Un saludo.
Reply
#3

La mejor manera es con un ejemplo
Код:
// Se llaman estas dos funciones
foo();
bar();

foo()
{
	static a = 5; // se crea variable "a" en la memoria con valor a 5
}

bar()
{
	static a; // a ya es 5, solo se esta "recuperando" de la memoria
	printf("a = %d", a); // a = 5
}
Reply
#4

El funcionamiento de static en una variable global es diferente, en una variable global sirve para indicar que esa variable sуlo va a existir en el archivo (include) donde haya sido definida.

Si se intenta acceder desde otro archivo (include o gamemode), va a salir un error diciendo que la variable no existe.

Tiene el mismo funcionamiento en las funciones, ejemplo:

Код:
static Function()
{

}
Esa funciуn sуlo va a existir en el archivo donde haya sido creada.

P.D.: El ejemplo de admantis carece de sentido comъn
Reply
#5

static es una palabra reservada de C, que sirve para declarar instancias (variables o funciones) dentro del espacio de definiciуn, sabiendo que no va a cambiar. No debe confundirse con la palabra reservada const.

PHP код:
stock funcion()
{
    new 
0;
    static 
0;
    
a++;
    
b++;
    
printf("A: %d, B: %d\n"ab);

En la primera llamada, a y b van a valer lo mismo, en la segunda llamada a la funciуn, a valdrб 1 y b valdrб 2.

Tengo entendido que no son variables globales (las cosas mбs sucias que pueden existir)
Reply
#6

En mi caso suelo usar variables static para string como en el ejemplo que ha dejado LatinZ, pero hay que tener mucho cuidado porque podrнa dar lugar a errores.

Ejemplo:
Код:
stock PlayerName(playerid)
{
    static playername[MAX_PLAYER_NAME + 1];
    GetPlayerName(playerid, playername, sizeof(MAX_PLAYER_NAME));
    return playername;
}

stock Test()
{
    printf("%s %s", PlayerName(0), PlayerName(1));
}

// playerid 0 = Pepito
// playerid 1 = Jaimito
El resultado serнa:
Код:
Jaimito Jaimito
En variables globales sуlo tiene sentido usarlo en includes para que las variables y funciones no entren en conflicto con otras variables con el mismo nombre (como comente arriba).
Reply
#7

Interesante, es lo que querнa saber.

Lo que quiero aclarar en mi caso es: no uso includes que tengan cуdigos referentes al GM, en pocas palabras, todas las variables estбn en el GM, por tanto no hago uso externo de includes para manipular dichas variables, їdeberнa cambiar todos los news por static?, esa es la pregunta. Gracias.

off: їabrirб GameRol algъn dнa?, soy user desde la V1 xd.

Saludos.
Reply
#8

No tiene sentido, el funcionamiento va a ser el mismo en variables globales.

off: Algъn dнa, algъn dнa xD
Reply
#9

Hacнa referencia que si la ejecuciуn es mбs rбpida o no.

off: (:V)
Reply
#10

Tenes que saber apartar ejecucciуn de los otros pasos de compilaciуn, claramente en el link (enlace) se unen todas las partes de un script, por lo cual no es relevante donde pongas las funciones, mбs que para organizaciуn.

Sobre los espacios de definiciуn, lo mejor es siempre evitar las variables globales, por estбndar. Pero si tienes eventos, como en SA-MP, que activan una funciуn, se complica.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)