Другое [INC] valist.inc функции с переменным числом параметров v2

Набор функций для доступа к аргументам

  1. Kailo
    Поддерживаемые игры:
    • CS: Source
    • 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:
    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 clientint args)
    {
        
    ReplyToCommand(client"Sum: %i"Sum(104050, -3080));

        return 
    Plugin_Handled;
    }

    int Sum(int ...)
    {
        
    va_start(1);
        
    int sum 0;
        while (
    va_more())
            
    sum += va_arg();
        
    va_end();
        return 
    sum;
    }
    C.C.Kira, Гексорал, Райский и 9 другим нравится это.

Последние обнoвления

  1. Версия 2, работает с SM 1.9!