Разница.
#1

Подскажите в чем разница между:
1)
PHP код:
    static XaOs[MAX_PLAYERS];
    
и
    
new XaOs[MAX_PLAYERS]; 
2)
PHP код:
    stock XaOs(playerid, const string[])
    
и
    stock XaOs
(playeridstring[]) 
Reply
#2

1) static - инициализируется один раз и существует на протяжении всей работы сервера. Сохраняет значения переменных на протяжении всей работы. Использовать в качестве глобальных бессмысленно.
new - инициализирается при каждом вызове функции, колбека или мода.

2) const - создает переменную, значение которой изменить нельзя. http://habrahabr.ru/blogs/cpp/59558/ язык другой но суть одна.
Reply
#3

Слыхал что static сохраняет значение в циклах.
pawn Код:
for(new i; i != 10; i++)
{
    static variable;
    if(i == 3) variable = 9999;
    printf("variable: %d", variable);
}
После 3 цикла variable навсегда останется 9999.
Reply
#4

Никогда не надо использовать статик внутри циклов, сугубо только внутри функции или колбеков!
Reply
#5

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Никогда не надо использовать статик внутри циклов, сугубо только внутри функции или колбеков!
Обоснуй.
Reply
#6

CaHbKo, сам написал: пост #3
Reply
#7

Quote:
Originally Posted by CaHbKo
Посмотреть сообщение
Обоснуй.
Да как два пальца:
static после иницализации существуют всегда, пока не отключишь серв, и вот ради какого-то цикла ты хочешь выделить в памяти сервера место, которое будет занято всегда, под массив для этого цикла?!

А теперь на пальцах:
Что рациональнее для цикла:
pawn Код:
for(new i, variable; i != 10; i++)
{
    if(i == 3) variable = 9999;
    printf("variable: %d", variable);
}
и твоя переменная после 3 итерации всегда будет 9999. И при этом место в памяти освободится после того как цикл прекратит свою работу.

Для чего нужен static, на примере банального счетчика.
pawn Код:
public OnGameModeInit()
{
    SetTimer("MyCount", 1000, 1);
    return 1;
}

forwrad MyCount();
public MyCount()
{
    static count = -1;
    if (count == -1)
    {
        count = 10;
    }
    else
    {
        printf("MyCount: %d", count);
        count--;
    }
}
вот для того чтобы переменная существовала только внутри паблика, не вылазила в область видимости глобальных переменных, но при этом и не обнулялась при каждом вызове паблика и существует static.
Reply
#8

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
1) static - инициализируется один раз и существует на протяжении всей работы сервера. Сохраняет значения переменных на протяжении всей работы. Использовать в качестве глобальных бессмысленно.
new - инициализирается при каждом вызове функции, колбека или мода.

2) const - создает переменную, значение которой изменить нельзя. http://habrahabr.ru/blogs/cpp/59558/ язык другой но суть одна.
Поправочка: если объявить глобальную переменную с ключевым словом static - это ограничит её видимость файлом, в котором она была объявлена. То есть в разных файлах мы можем иметь глобальные переменные с одним и тем же имеем. Так что смысл очень даже есть.
Reply
#9

Quote:
Originally Posted by Norck
Посмотреть сообщение
Поправочка: если объявить глобальную переменную с ключевым словом static - это ограничит её видимость файлом, в котором она была объявлена. То есть в разных файлах мы можем иметь глобальные переменные с одним и тем же имеем. Так что смысл очень даже есть.
начнем с того что Pawn это не С... Я думаю вы поняли куда я клоню.
Reply
#10

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
начнем с того что Pawn это не С... Я думаю вы поняли куда я клоню.
Я не имею опыта работы с чистым си, поэтому не уверен, что понял правильно. Но объявление глобальных переменных как static в некоторых ситуациях может оказаться очень выгодным решением.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)