- Поддерживаемые игры
-
- CS: Source (OrangeBox)
- CS: GO
- Team Fortress 2
- DOD: Source
- L4D 1 & 2
Включаемый файл расширяющий функционал языка для работы с аргументами функций с переменным числом аргументов.
В текущий момент работает корректно только с переменными (с массивами не работает).
Инструкция по применению:
1) Включите файл в состав плагина директивой #include.
Примечание (для v2): включайте его первым среди инклудов для корректной работы.
2) Вызовите va_start(int param_n) в функции с переменным числом аргументов (далее просто функции) , где param_n номер аргумента с ..., счет аргументов начинается с 1.
Примечание (для v1): Очень важно что бы не было создано ни каких переменных до вызова va_start(), иначе не будет работать корректно.
3) Для получения следующего аргумента используйте va_arg(). В случае если вы уже извлекли все аргументы и вызвали va_arg(), плагин выкинет ошибку.
Вы можете использовать va_args() для получения кол-во переданных в функцию аргументов и va_more() для проверки извлечены ли уже все аргументы.
4) Когда вы извлекли все аргументы необходимо вызвать va_end(), иначе будет утечка памяти.
Внимание!
1-ая версия не работает на 1.9 после обновления sourcepawn "Disallow negative indices in all array access patterns" (d7743c3).
Пример плагина с valist.inc:
В текущий момент работает корректно только с переменными (с массивами не работает).
Инструкция по применению:
1) Включите файл в состав плагина директивой #include.
Примечание (для v2): включайте его первым среди инклудов для корректной работы.
2) Вызовите va_start(int param_n) в функции с переменным числом аргументов (далее просто функции) , где param_n номер аргумента с ..., счет аргументов начинается с 1.
Примечание (для v1): Очень важно что бы не было создано ни каких переменных до вызова va_start(), иначе не будет работать корректно.
3) Для получения следующего аргумента используйте va_arg(). В случае если вы уже извлекли все аргументы и вызвали va_arg(), плагин выкинет ошибку.
Вы можете использовать va_args() для получения кол-во переданных в функцию аргументов и va_more() для проверки извлечены ли уже все аргументы.
4) Когда вы извлекли все аргументы необходимо вызвать va_end(), иначе будет утечка памяти.
Внимание!
1-ая версия не работает на 1.9 после обновления sourcepawn "Disallow negative indices in all array access patterns" (d7743c3).
Пример плагина с valist.inc:
PHP:
// © Maxim "Kailo" Telezhenko, 2017
#pragma newdecls required
#pragma semicolon 1
#include <valist>
public void OnPluginStart()
{
RegConsoleCmd("sm_nums", Cmd_Nums);
}
public Action Cmd_Nums(int client, int args)
{
ReplyToCommand(client, "Sum: %i", Sum(10, 40, 50, -30, 80));
return Plugin_Handled;
}
int Sum(int ...)
{
va_start(1);
int sum = 0;
while (va_more())
sum += va_arg();
va_end();
return sum;
}