Portal SAMP
[Ajuda] statics e funcoes - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] statics e funcoes (/showthread.php?tid=4101)



statics e funcoes - Klaba - 19/10/2023

amigos, q diabos é uma static. Pelo oq pesquisei ela é uma variável mas eu ja vi gm usa-la como uma função.

1. Qual a diferença entre usar uma New e uma Static.
2. Que diferença faz usar uma stock? No quesito economia de memória, se houver.


RE: statics e funcoes - White_Blue - 19/10/2023

Uma variável estática como o nome já diz, é alocada apenas uma vez na memória durante toda a execução do programa independente de quantas vezes você use uma função, isto é útil para uma função que é reutilizada diversas vezes no código, uma variável "new" que é dinâmica, toda vez que você chamar a função, a variável vai ser alocada de novo na memória. Quanto a "stock", "stock" não é nada mais que uma palavra-chave, quando você usa "stock" para declarar uma função, caso você não utilize a função, a função será simplesmente ignorada e não gerará um warning de que a função não foi utilizada, por outro lado, caso você declare uma função sem usar a palavra-chave "stock" e não use a função, o compilador gerará um warning te alertando que você definiu a função porém não a está utilizando.

Exemplos:
static:
Código PHP:
GetPlayerNameEx(playerid) {
    static 
Name[MAX_PLAYER_NAME+1]; // Usa o macro MAX_PLAYER_NAME que equivale à 24 células(Tamanho de nickname máximo aceito pelo SA-MP) e incrementa +1 célula na string(Para preencher o caractere de escape "\0" que é nulo e como Pawn é uma linguagem C-LIKE, os caracteres são armazenadas na memória da seguinte forma "string\0" e o caractere nulo "\0" acaba ocupando 1 célula de espaço já que é interpretado como texto).
    
GetPlayerName(playeridNamesizeof(Name)); // Pega o nome do jogador e atribui à variável "Name".
    
return Name// Retorna o nome do jogador na função


stock:
Código PHP:
// Não usando stock
Olamundo() {
printf("Olá, mundo!");
// Retornará um aviso, já que a função "Olamundo" está sendo declarada porém não está sendo utilizada.
}
// Usando stock
stock Olamundo() {
printf("Olá, mundo!");
// Não retornará nenhum aviso, já que a função "Olamundo" está sendo declarada usando a palavra-chave "stock", e a função não está sendo utilizada, portanto será simplesmente ignorada pelo compilador.