Pawn. Создание и работа с функциями

Функции безусловно важны в программировании. Они упрощают код и делают его понятным для всех.

Создать функцию можно несколькими способами:

stock func_name() // stock - резервирует адрес в памяти, поэтому для функций рекомендуется использовать именно это
{
 
}
func_name() // отличия от stock в том, что если функция не используется, то pawn компилятор выдаст предупреждение
{
 
}

Ещё одна особенность этих способов в том, что при не использовании функции, заданной с помощью этих способов, компилятор их игнорирует и в скомпилированную программу они не включаются. Это очень удобно при использовании различных библиотек с огромным количеством функций, расширяющих функционал Pawn.

Есть ещё один способ создания функций:

forward func_name(); // объявляем о существовании данной функции
public func_name()
{
 
}

При использовании этого способа вызов идёт по имени, а не по адресу. Этот способ хорош тем, что данную функцию можно вызвать из любого скрипта подключённого к серверу и можно запустить таймер с этой функцией. Рекомендуется использовать именно в этих случаях, ведь два первых способа являются более оптимизированными вариантами.

Рассмотрим более сложные конструкции:

Создадим функцию с принимаемым параметром:

stock sum(x, y) // функция возвращает сумму двух целых чисел
{
	return (x + y);
}

Использовать можно так:

new result = sum(5, 8);
printf("result=%d", result);

Выведет: result=13

 

stock sum(x, y, &result = 0) // функция записывает в переменную result результат выполнения x+y
{
	result = x + y;
}

Использовать можно так:

new result;
sum(5, 8, result);
printf("result=%d", result);

Выведет: result=13

 

Для чисел других типов это выглядит так:

stock Float:sum(Float:x, Float:y) // функция возвращает сумму дробных чисел в виде дробного числа
{
	return (x + y);
}

Использовать можно так:

new Float:result = sum(5.4, 8.8);
printf("result=%f", result);

Выведет: result=14.2

 

Для строк это выглядит так:

stock sum(x[], y) // функция выводит x и y
{
	printf("x=%s, y=%d", x, y);
}

Использовать можно так:

sum("lala", 8);

Выведет: x=lala, y=8

  • anonym

    спасибо

  • )))

    Спасибо за уроки)
    Все очень хорошо понятно)

  • Спасибо.
    Хороший урок, помог…

  • ZiGGi

    Спасибо за отзывы, рад помочь;)

  • M

    Спасибо, всё очень понятно =)

  • Chez

    в примере с float не вижу указания типа для result

    • Исправил, проделки копи-паста:)

  • Dominik

    Сделай подробное описание библиотеки инклудов YSI. Я думаю всем будет интересно! Статья хорошая.

Перейти к верхней панели