Спецификаторы аргументов
Материал из Pro-Pawn Wiki
Описание:
Спецификаторы для обозначения типов аргументов в функциях
SetTimerEx()
, CallLocalFunction()
и CallRemoteFunction()
.
Спецификатор(ы) | Значение | Примечание |
---|---|---|
s
|
Строка | |
a
|
Массив | Следующим аргументом должен быть размер массива (со спецификатором d /i или любым другим, отличным от a и s ).
|
d , i
|
Целое число | |
f
|
Вещественное число | |
b
|
Логическое значение | |
c
|
Символ |
Баг SA-MP |
При передаче в SetTimerEx() массивов и строк (спецификаторы a и s соответственно) под них резервируется память в секции стека/кучи скрипта, однако эта память не высвобождается при уничтожении таймера. Многократное создание таймеров с передачей строк или массивов может привести к ошибкам времени выполнения из-за исчерпания свободного места в секции стека/кучи - первопричину такой ошибки очень трудно определить, если не знать о данном баге.
При передаче через SetTimerEx() строка может оказаться повреждена.
|
Пример использования:
forward ArrayFunction(const array[], size);
public ArrayFunction(const array[], size)
{
printf("Размер массива: %d", size);
for (new i = 0; i < size; ++i)
printf("\tarray[%d]: 0x%08x", i, array[i]);
}
forward StringFunction(const string[]);
public StringFunction(const string[])
{
printf("string: %s", string);
}
forward ThreeArgFunction(a, Float:b, bool:c);
public ThreeArgFunction(a, Float:b, bool:c)
{
printf("%d, %f, %s", a, b, c ? ("true") : ("false"));
}
public OnGameModeInit()
{
static const array[] = { 0x00112233, 0x44556677, 0x8899AABB };
CallLocalFunction("ArrayFunction", "ai", array, sizeof(array));
CallLocalFunction("StringFunction", "s", "abc");
CallLocalFunction("ThreeArgFunction", "ifb", 1, 2.0, false);
}
public ArrayFunction(const array[], size)
{
printf("Размер массива: %d", size);
for (new i = 0; i < size; ++i)
printf("\tarray[%d]: 0x%08x", i, array[i]);
}
forward StringFunction(const string[]);
public StringFunction(const string[])
{
printf("string: %s", string);
}
forward ThreeArgFunction(a, Float:b, bool:c);
public ThreeArgFunction(a, Float:b, bool:c)
{
printf("%d, %f, %s", a, b, c ? ("true") : ("false"));
}
public OnGameModeInit()
{
static const array[] = { 0x00112233, 0x44556677, 0x8899AABB };
CallLocalFunction("ArrayFunction", "ai", array, sizeof(array));
CallLocalFunction("StringFunction", "s", "abc");
CallLocalFunction("ThreeArgFunction", "ifb", 1, 2.0, false);
}
См. также: