Введение в программирование на SourcePawn. Часть 2.

Сообщения
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, надо осторожно. Особенно если это массив или строка.
Строку лучше сразу "очистить":
Код:
decl String:szMyVariable[64];
szMyVariable[0] = 0;
И ещё, пожалуй, одно главное отличие нового синтаксиса от старого: String заменён на char, Float заменён на float.
 
Последнее редактирование:
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
Однозначно, старый синтаксис - это именно тот, что сейчас используется в AMXX Pawn
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу