PDA

Просмотр полной версии : [Вопрос] stock, static, const



...dolphin:з
06.07.2015, 12:47
Раньше сидел на другом форуме, решил зайти на ваш и был удивлен. Тут совсем другой код, не понятный мне. Кто может объяснить, в каких случаях использовать static, const, static const и ПЕРЕМЕННУЮ stock. Буду рад, если вы еще напишите, в чем различие между new и этим

NewGreen
06.07.2015, 14:15
Если владеете английским языком, то на странице официальной документации Pawn есть описание различий 60-62 стр.
http://www.compuphase.com/pawn/Pawn_Language_Guide.pdf

Если в двух словах то:

static - можно применять во включаемых файлах (include), область видимости этой переменной будет ограничена файлом, т.е. если в моде объявить переменную с таким же именем что и в файле, то при компиляции, не будет ошибки в виде:
error 021: symbol already defined:

const - (лат. constanta — постоянная, неизменная) позволяет создавать переменные, значение которых в дальнейшем нельзя изменить.

static const - тоже что и просто const, но опять же, позволяет ограничить область видимости в пределах файла, и избежать появления предупреждения:
warning 201: redefinition of constant/macro

stock - если переменная обозначена как stock, то при компиляции, если переменная не используется, она будет проигнорирована компилятором, в следствии чего не появится предупреждение вида:
warning 203: symbol is never used:

...dolphin:з
06.07.2015, 14:30
Т.е. мне продолжать использовать new?

NewGreen
06.07.2015, 15:02
Т.е. мне продолжать использовать new?
Хм, думаю на этот вопрос, Вы должны сами для себя, ответить. Вы пишете алгоритм, и Вам решать что использовать в процессе его написания.
К примеру, если Вы будете писать алгоритм нахождения площади поверхности сферы, в формуле нахождения которой используется число Пи.
Число Пи - это математическая константа, поэтому его можно записать используя const. Ваша программа будет выглядеть так:



#include <a_samp>

const Float: Pi = 3.141592;
new Float: S,r;

main()
{
r = 10;
S = 4*Pi*(r*r);
printf("S = %f",S);
return 1;
}

Bady
15.09.2015, 15:40
Хотел бы узнать подробную информацию о static и const, в каких случаях их нужно использовать и как правильно, ну и если можно пару примеров.
Как я понял const придерживается одного заданного значения, и его изменить нельзя.

Desulaid
15.09.2015, 16:31
const - это константа, значение которой вы устанавливаете сами и оно не измениться не при каких условиях.
static - это объявление переменных и массивов (и т.д.), видимость которых ограничено файлом, где вы создаете их.



const UNTITLED = 5;

И значение этой константы будет навеки равным пяти, аналогичная ситуация с #define

#define UNTITLED (5)


Например в файле odmenki_vsem.INC создали массив


static over_adm_level[MAX_PLAYERS];

Потом вы подключили инклюд(где у нас находится массив) и к примеру создали массив в самом .pwn файле с точно таким же именем. Но конфликта имен не будет, потому что static массив виден только в файле, в котором мы его и создали. С ними работается так же как и с обычными переменным, созданными через new

Вроде так ;)

Daniel_Cortez
15.09.2015, 16:40
Думаю, целесообразно будет объединить эту тему с другой. Одну секунду...

EDIT: Готово.

Bady
15.09.2015, 17:17
const - это константа, значение которой вы устанавливаете сами и оно не измениться не при каких условиях.
static - это объявление переменных и массивов (и т.д.), видимость которых ограничено файлом, где вы создаете их.



const UNTITLED = 5;

И значение этой константы будет навеки равным пяти, аналогичная ситуация с #define

#define UNTITLED (5)


Например в файле odmenki_vsem.INC создали массив


static over_adm_level[MAX_PLAYERS];

Потом вы подключили инклюд(где у нас находится массив) и к примеру создали массив в самом .pwn файле с точно таким же именем. Но конфликта имен не будет, потому что static массив виден только в файле, в котором мы его и создали. С ними работается так же как и с обычными переменным, созданными через new

Вроде так ;)

Не совсем понял насчет const то есть вместо new можно использовать const, или как?

L0ndl3m
15.09.2015, 17:30
Видимость переменных в pawn!? Что-то новенькое...

Nurick
15.09.2015, 19:02
const
Объявляет переменную, которая не может быть изменена кодом.


static
Статическая переменная является глобальной переменной, но с более ограниченной областью применения. При использовании static на глобальном уровне в результате чего создаются переменные ограничиваются только тот раздел в котором они были созданы .

Bady
15.09.2015, 19:40
но с более ограниченной областью применения

При использовании static на глобальном уровне в результате чего создаются переменные ограничиваются только тот раздел в котором они были созданы .
Не очень уж и понятно, анг текст переводчиком переводил?
Кто нибудь может своими словами сказать насчет static

Desulaid
15.09.2015, 20:18
Видимость переменных в pawn!? Что-то новенькое...

Ну это же я :D

Bady
16.09.2015, 19:02
Подниму