Иконка ресурса

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

Нет прав для скачивания
Поддерживаемые игры
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 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;
}
Автор
Kailo
Скачивания
29
Просмотры
38
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Kailo

Поделиться ресурсом

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

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

    Изменения: 1) Теперь работает с SM 1.9: Вместо использования отрицательных индексов...
Сверху