Разработчик
Проверенный
Участник
Пользователь
- Сообщения
- 207
- Реакции
- 420
- Помог
- 10 раз(а)
Введение в программирование на SourcePawn. Синтаксисы языка.
Выделяют два типа синтаксиса: старый и новый.
Новый синтаксис был введён совсем недавно, и более похож на Си. Первая версия SM, поддерживающая его частично - 1.7.3.
Все версии компиляторов SM старее подразумевают компиляцию кода, написанного только на старом. Новый они не понимают.
Писать для CS:GO на старом нет смысла. Сама игра "не переваривает" SM версии 1.7.3 и ниже. Только 1.8 и выше.
Для сравнения, приведу один и тот же код на старом синтаксисе, и на новом.
Код:
#include <sourcemod>
public OnPluginStart() {
new iVar = DoSomeAction();
new bool:bVar = DoReallySomeAction();
new String:szVar[64];
new Float:flVar;
new Float:vecVar[3];
}
DoSomeAction()
return 1;
bool:DoReallySomeAction()
return true;
Код:
#include <sourcemod>
public void OnPluginStart() {
int iVar = DoSomeAction();
bool bVar = DoReallySomeAction();
char szVar[64];
float flVar;
float vecVar[3];
}
int DoSomeAction() {
return 1;
}
bool DoReallySomeAction() {
return true;
}
Старый же позволяет нам не оборачивать код в фигурные скобки ({ и }), если в нём всего одна инструкция.
Ещё у старого синтаксиса есть довольно мощная инструкция - decl. Она является как бы заменой new, но в отличие от него:
- decl не позволит Вам сразу заполнить переменную чем-то: он создавался не для этого.
- При создании переменной через new, переменная обязательно содержит уже ноль или ноли, если это массив, и если мы сразу ей значение не присваиваем. decl переменную при создании не очищает, мы сразу получаем "мусор виртуальной машины" в ней. Это быстрее, чем new.
Строку лучше сразу "очистить":
Код:
decl String:szMyVariable[64];
szMyVariable[0] = 0;
Последнее редактирование: