Список часто встречаемых ошибок в pawno
Данная тема содержет наиболее распространенные ошибки и предупреждения в pawno при создании скриптов sa-mp
Когда компилятор находит ошибку в файле, то выводится сообщение, в таком порядке:
- Имя файла
- номер строки компилятора были обнаружены ошибки в скобках, непосредственно за именем
- класс error (ошибка, фатальная ошибка или предупреждение)
- номер ошибки
- описание ошибки
Например:
hello.pwn(3) : error 001: expected token: ";", but found "{"
Примечание: эта ошибка может быть на линии, над линией, что показано, так как компилятор не всегда может установить ошибку перед проанализировав полное выражение.
Категории ошибок
Ошибки разделяются на три класса:
Ошибки (errors)
- Описание ситуации когда компилятор не может скомпилировать код
- Ошибки номеруются от 1 до 99
Критические ошибки (Fatal errors)
- Критические ошибки и описание, от которых компилятор не может восстановиться.
- Парсинг прерывается (нет отклика программы).
- Критические ошибки номеруются от 100 до 199.
Предупреждения ( Warings )
- Предупреждения указывают на возможную причину возникновения багов, вылетов.
- Предупреждения номеруются от 200 до 299.
Распространенные ошибки
001: expected token (ожидаемый знак)
Обязательный знак отсутствует
Пример:
error 001: expected token: ";", but found "return" main() { print("test") // тут должна быть точка с запятой ";" return 1; }
002: only a single statement (or expression) can follow each “case” (только одно выражение может быть в одной строке с «case»
В каждом case оператора switch без фигурных скобок может содержаться только один оператор если больше нужно ставить скобки.
Пример:
error 002: only a single statement (or expression) can follow each "case"
main() { switch(x) { case 0: print("hello"); print("hello"); } return 1; }
Так же могут быть еще и предупреждения и дополнительные ошибки:
error 002: only a single statement (or expression) can follow each "case" warning 215: expression has no effect error 010: invalid function or declaration
Вот так это можно исправить:
main() { switch(x) { case 0: { print("hello"); print("hello"); } } return 1; }
004: function «x» is not implemented (Функция «x» не используется
Часто бывает что в функции выше пропущена скобка.
025: function heading differs from prototype
Это проиходит когда в функции не совпадают аргументы.
К примеру:
forward MyFunction(playerid); public MyFunction(player, vehicleid);
Исправляем:
forward MyFunction(playerid, vehicleid); public MyFunction(playerid, vehicleid);
035: argument type mismatch (argument x) (не совпадение типов аргумента(ов)
К примеру когда в место playerid — integer аргумента стоит «playerid» — string или 0.5 — float
Пример:
error 035: argument type mismatch (argument 1)
Kick("playerid"); // Как видите в место целого числа (integer) стоит строка
Исправляем:
Kick(playerid);
046: unknown array size (variable x)
Не указан размер массива.
Пример:
new string[]; string = "pawno";
Исправляем:
new string[6]; string = "pawno";
047: array sizes do not match, or destination array is too small
Размер массива мал или не совпадает.
- Многомерные массивы должны иметь одинаковый размер
- Одномерные массив к которому присваивают(правый должен иметь больше размер чем левый.
new destination[8]; new msg[] = "Hello World!"; destination = msg;
В приведенном выше коде размер строки «Hello world!» ровна 12 байт а массив к которому присваиваем имеет размер 8 байт из этого и складывается ошибка.
Если увеличить размер массива destination до 13 байт то ошибка исправится.
new destination[13]; new msg[] = "Hello World!"; destination = msg;
055: start of function body without function header
Начало тела функции без функции заголовка.
Критические ошибки (FATAL ERRORS)
100: cannot read from file: "<file>"
Компилятор не может найти или прочитать указанный файл, убедитесь что он находится по адресу (<папка с сервером>pawnoinclude).
Пример:
#include <a_sam>
Исправляем:
#include <a_samp>
Совет
Не нужно открывать ваш код дважды, не нужно тыкать несколько раз на файл. Откройте сначала редактор, потом ваш проект.
Предупреждения( Warnings )
202: number of arguments does not match definition
Описание ошибки довольно понятное, это значит что вы используете слишком мало или слишком много аргументов в функции, обычно это признак того что функция используется не правильно, обратитесь к документации.
Функция GetPlayerHealth согласно официальному источнику wiki.sa-mp.com имеет два аргумента playerid и Float:health ссылка
Пример:
GetPlayerHealth(playerid);
Исправляем:
new Float:health; GetPlayerHealth(playerid, health);
203: symbol is never used: «symbol»
Вы создали переменную или функцию и она ни где не используется тогда ищите в окне компилятора это предупреждение, это не как не влияет на код и не угражает ему, так что если вы удалите переменную или функцию которая не используется, то вы сэкономите память.
Пример:
stock SomeFunction() { // Blah }
204: symbol is assigned a value that is never used: «symbol»
Это предупреждение аналогично к предыдущему, разница в том что к переменной что то присвоено и оно не как не используется, это безопасно
209: function should return a value
Функция ничего не возвращает, вы создали её:
SomeFunction() { // Blah }
Решили её присвоить к чему нибудь к примеру:
new result = SomeFunction(); // ожидает 1
Вот так исправить
SomeFunction() { // Blah return 1; }
211: possibly unintended assignment
Если вы введете оператор присваивания в условии и оно не будет в круглых скобках то будет предупреждение
if(vehicle = GetPlayerVehicleID(playerid)) // ошибка if(vehicle == GetPlayerVehicleID(playerid)) // все норм if((vehicle = GetPlayerVehicleID(playerid))) // все норм, так значение функции присвоится к переменной потом выражение вычесляется { то есть это как if(IsPlayerConnected(playerid)}
213: tag mismatch ( несовпадение тегов)
Это происходит когда:
- Тип переменной указан не верно или не имеет его
- Выражения по обе стороны бинарного оператора имеют разные теги
- В пременную возвращен не верный тип переменной или не имеющий его.
- Индексирование массива, который требует тегами индекс без тега или неправильное имя тега
Часто это бывает на 3d текстах или тексдравах Text3D, Text
Не правильно:
new health; GetPlayerHealth(playerid, health);
Правильно:
new Float:health; GetPlayerHealth(playerid, health);
217: loose indentation
Компилятор выдаст ошибку если не соблюдены отступы.
Правильно:
if(condition) { action(); result(); }
Не правильно:
if(condition) { action(); result(); }
Отступы делаются по нажатью кнопки TAB это практика в программировании для удобного чтения кода.
219: local variable «foo» shadows a variable at a preceding level
Локальная переменная в тени глобальной то есть над локальной переменной создана точно такая же глобальная. В практике программирования префиксом глобальной переменной является «g» в начале переменной к примеру
new gPlayerMoney
любыми способами избегайте их.
К примеру:
new team[MAX_PLAYERS]; // объявляем глобальную переменную function(playerid) { new team[MAX_PLAYERS]; // создаем еще одну, и получаем статью 219 кодекса ошибок :D team[playerid] = random(5); }
Решение:
Просто переименуйте локальную переменную team.
225: unreachable code ( недоступный код )
Это происходит тогда когда вы пишите какой нибудь код после return, после return’а код не выполняется и он считается бесполезным
Пример:
#include <zcmd.inc>
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); return 1; // завершаем процесс } else { SendClientMessage(playerid, -1, "Вы не администратор"); return 1; // завершаем процесс } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // Этот код не доступен он не будет выполнятся. }
Решение:
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); } else { SendClientMessage(playerid, -1, "Вы не администратор"); } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // этот код запустится return 1; // завершаем процесс }
235: public function lacks forward declaration (symbol «symbol»)
Отсутствует forward.
Не правильно:
public MyFunction() { }
Правильно:
forward MyFunction(); public MyFunction() { }
Надеюсь эта статья поможет вам в языке программирования, желаю вам не повторять ошибок дважды и что бы ваш код был быстрым, надежным!
Оставляйте ваши отзывы, ставьте плюсы, пишите недостатки ошибки, недостатки статьи или их недочеты. Удачи в мире PAWNO!
Всем привет. В этой теме я расскажу о простом способе поиска багов в Вашем коде. Для меня стал удивлением тот факт, что 99% пользователей, которые задают вопросы, не знают об этом простом способе.
Введение
И так, представим что Вы написали уникальную систему для вашей очередной уникальной копии Аризоны. Код скомпилировался без ошибок и варнингов, и вроде бы даже работает. Но работает он не так, как было задумано. Что же делать в таком случае? Все просто, добавлять отладку.
Вам понадобятся всего 2 функции —
print и printf. Что они делают? Выводят сообщение в консоль. Можно провести аналогию с функцией SendClientMessage. Только SendClientMessage выводит сообщение в чат, а print в консоль.
print
Пример: добавим в public OnGameModeInit функцию print с произвольным текстом
C-like:
public OnGameModeInit()
{
print("Моя доработка аризоны загружена успешно!");
return 1;
}
Скомпилируем и запустим сервер. При запуске сервера открывается консоль, но думаю это вы и так знаете. В эту же консоль будет выводить текст функция print.
По итогу в консоли мы увидим следующее:
Моя доработка аризоны загружена успешно!
При запуске сервера вызвался
public OnGameModeInit и наша функция print, которая и вывела сообщение в консоль.
Что? И как это поможет найти ошибку?
Тут мы плавно подходим к самому простому варианту поиска неработающего или работающего, но не так как нужно кода. Я бы конечно назвал это гордым словом breakpoint, но к сожалению на сегодняшний день у нас с вами нет таких мощных инструментов для отладки. Ближе к теме. И так, скажем у нас есть некая абстрактная команда, который выдает нам любой аксессуар, пусть это будет шляпа, или попугай — не важно. Весь код, написанный ниже и далее по теме будет максимально плохим во всех его проявлениях. Но — он будет максимально реалистичным, и если посмотреть темы с вопросами, то большинство кода там будет именно таким.
C-like:
cmd:datigrokuaksy(playerid, params[])
{
if(sscanf(params, "dd", params[0], params[1]))
return SCM(playerid, RANDOMCOLOR, "Введите: "BELIY_CVET"/datigrokuaksy {ID игрока} {ID аксессуара}");
if(fulldostup(playerid)) return 0;
AttachAksNaIgroka(params[0], params[1]);
new stringer[4096];
format(stringer, 2048, ""ZELENIY_CVET"Администратор %s выдал вам аксессуар "ШЛЯПА"", GetImyaIgroka(playerid));
SCM(params[0], BELIY_CVET, stringer);
return 1;
}
Здесь мы будем использовать print после каждого условия, чтобы понять, выполняется оно или нет. Если сообщение в консоли появилось — условие прошло. Если нет — нет. Добавляем print.
C-like:
cmd:datigrokuaksy(playerid, params[])
{
print("Команда вызвана");
if(sscanf(params, "dd", params[0], params[1]))
return SCM(playerid, RANDOMCOLOR, "Введите: "BELIY_CVET"/datigrokuaksy {ID игрока} {ID аксессуара}");
print("Проверка sscanf прошла");
if(fulldostup(playerid)) return 0;
print("Проверка на фулл доступ прошла");
AttachAksNaIgroka(params[0], params[1]);
print("Аксессуар был прицеплен к игроку");
new stringer[4096];
print("Переменная была создана"); // Тут print не обязательна, просто для примера
format(stringer, 2048, ""ZELENIY_CVET"Администратор %s выдал вам аксессуар "ШЛЯПА"", GetImyaIgroka(playerid));
print("Отформатировали строку"); // Тут print не обязательна, просто для примера
SCM(params[0], BELIY_CVET, stringer);
print("Команда выполнена успешно");
return 1;
}
Мы добавили print после каждой строчки кода и теперь в консоли мы сможем наблюдать за его выполнением.
Запускаем сервер, заходим в игру и вводим команду /datigrokuaksy. Мы видим сообщение в чате «Введите /datigrokuaksy {ID игрока} {ID аксессуара}».
В консоли мы увидим следующее:
А где остальные сообщения? — спросите вы. В этом случае все верно, потому что первом условии у нас есть return, который пропускает весь код ниже. Тем самым можно понять, что условие со sscanf выполнилось. Теперь проверим, выполняется ли условие со sscanf с аргументами.
Вводим /datigrokuasky 24 10. И видим что в чате сообщения не было. А у игрока с ID 24 шляпы так и не появилось. Открываем консоль и видим там следующее:
Команда вызвана
Проверка sscanf прошла
Проверка sscanf прошла, а на фулл доступ не прошла. Как же так? Ведь я добавил себя в БД, во все define да и вообще сервер мой и я заплатил за его хостинг 80 рублей. А у меня не работает главная фишка Аризоны.
Теперь включаем логику — если в консоли не было сообщения о том, что проверка на фулл доступ прошла — значит проблема именно в нем. Смотрим в чем же у нас проблема. Функция
fulldostup возвращает 1, если доступ есть и 0, если доступа нет. В нашем случае доступ есть и функция вернула 1. Условие стало true и выполнился результат — return. Весь код ниже пропущен. В данном случае был пропущен «!» перед условием, добавляем и смотрим.
C-like:
cmd:datigrokuaksy(playerid, params[])
{
print("Команда вызвана");
if(sscanf(params, "dd", params[0], params[1]))
return SCM(playerid, RANDOMCOLOR, "Введите: "BELIY_CVET"/datigrokuaksy {ID игрока} {ID аксессуара}");
print("Проверка sscanf прошла");
if(!fulldostup(playerid)) return 0; // Исправление здесь
print("Проверка на фулл доступ прошла");
AttachAksNaIgroka(params[0], params[1]);
print("Аксессуар был прицеплен к игроку");
new stringer[4096];
print("Переменная была создана"); // Тут print не обязательна, просто для примера
format(stringer, 2048, ""ZELENIY_CVET"Администратор %s выдал вам аксессуар "ШЛЯПА"", GetImyaIgroka(playerid));
print("Отформатировали строку"); // Тут print не обязательна, просто для примера
SCM(params[0], BELIY_CVET, stringer);
print("Команда выполнена успешно");
return 1;
}
Компилируем, перезапускаем сервер и заходим. Вводим команду /datigrokuasky 24 10 и счастливый игрок с ID 24 получает свою шляпу. Все ошибки исправлены и команда отработала так, как и было задумано.
В консоли видим следующее:
Команда вызвана
Проверка sscanf прошла
Проверка на фулл доступ прошла
Аксессуар был прицеплен к игроку
Переменная была создана
Отформатировали строку
Команда выполнена успешно
Теперь разберем более простой пример
C-like:
new a = 1;
new b = 4;
if((a + b) == 5) print("a + b = 5");
if((b - a) == 0) print("b - a = 0");
if(a == 1) print("Значение a = 1");
if(b == 2) print("Значение b = 2");
Если мы запустим этот код, то в консоли мы увидим следующее:
И так, переменная a у нас равна 1, переменная b — 4.
Первое условие. Если a (1) + b (4) = 5, условие
true, т.к. 1 + 4 действительно равно 5. Выводим сообщение в консоль.
Второе условие. Если b (4) — a (1) = 0, условие false, т.к. 4 — 1 = 3, а не 0. Соответственно условие не выполнено и функция print вызвана не будет.
Третье условие. Если а (1) = 1, условие true, 1 действительно равен 1. Функция print будет вызвана.
Четвертое условие. Если b (4) = 2. 4 не равно 2, условие false, print не будет вызвана.
На этом с функцией print закончим. Мы поняли, что она выводит сообщение в консоль и с помощью нее мы можем проверить, выполняется ли какое-нибудь условие или функция.
printf
Теперь поговорим о функции printf. Буква f в конце означает format. С помощью этой функции мы сможем выводить в консоль значения переменных и результаты выполнения функций. Почему бы тогда просто не создать переменную, записать в нее нужное нам сообщение при помощи функции format и не вывести это через print. Во первых с printf вам не нужно создавать переменных и использовать format — это банально быстрей и удобней. Во вторых — мы не создаем переменных и не занимаем лишнюю память. Отладка отдельно от кода — верное решение.
Функция printf принимает 2 аргумента — это текст и специфицаторы, такие же, как и в функции format
%i, %d | Целое число |
%s | Строка |
%f | Число с плавающей точкой, в pawn переменные данного типа начинаются с тега Float: |
%c | ASCII символ, принимает в себя целое число, которое является номером символа. Подробней вы можете ознакомиться тут: https://ru.wikipedia.org/wiki/ASCII |
%x | Число в шестнадцатеричной системе счисления |
%b | Число в двоичной системе счисления |
%% | Знак процента (%) |
%q | Экранирование специальных символов для SQLite (Начиная с версии 0.3.7) |
Разберем простой пример
C-like:
new a = 1;
new b = 4;
printf("Значение a - %i, b - %i", a, b);
Результатом выполнения кода выше будет сообщение в консоль:
Как мы видим, все просто. Синтаксис практически такой же, как у функции
format, исключая создание переменных. Теперь давайте усложним задачу и возьмем код из первого примера.
C-like:
cmd:datigrokuaksy(playerid, params[])
{
print("Команда вызвана");
if(sscanf(params, "dd", params[0], params[1]))
return SCM(playerid, RANDOMCOLOR, "Введите: "BELIY_CVET"/datigrokuaksy {ID игрока} {ID аксессуара}");
print("Проверка sscanf прошла");
if(!fulldostup(playerid)) return 0;
print("Проверка на фулл доступ прошла");
AttachAksNaIgroka(params[0], params[1]);
print("Аксессуар был прицеплен к игроку");
new stringer[4096];
print("Переменная была создана");
format(stringer, 2048, ""ZELENIY_CVET"Администратор %s выдал вам аксессуар "ШЛЯПА"", GetImyaIgroka(playerid));
print("Отформатировали строку");
SCM(params[0], BELIY_CVET, stringer);
print("Команда выполнена успешно");
return 1;
}
Вводим команду и видим что ничего не работает. Смотрим в консоль:
Команда вызвана
Проверка sscanf прошла
Что? Я же выдавал себе фулл доступ. В чем же проблема?
Тут то нам и поможет функция printf, которая сможет показать нам результат выполнения функции. Как мы помним, функция fulldostup возвращает 0 или 1. 0 и 1 — это целое число. Спецификатор для него будет %i или %d, без разницы.
Из старой темы:
%i от %d отличается тем, что %i может принимать числа как в привычной нам десятеричной системой счисления (цифры от 0 до 9), так и в 16-ти и 8-миричных системах счисления.
Лично я использую %i, т.к. это у меня ассоциируется с integer. Но опять же, в реальных задачах никакой разницы нет.
Наша функция будет следующего вида:
C-like:
printf("Результат выполнения функции fulldostup для игрока ID %i, - %i", playerid, fulldostup(playerid));
Теперь такой момент. В каком месте нам ее разместить. Ответ — в любом, до условия, которое не выполняется. Условие с функцией fulldostup у нас не выполняется, соответственно после него размещать нашу printf смысла просто нет — не выполнится условие, не выполнится и функция. Я размещу перед условием.
C-like:
cmd:datigrokuaksy(playerid, params[])
{
print("Команда вызвана");
if(sscanf(params, "dd", params[0], params[1]))
return SCM(playerid, RANDOMCOLOR, "Введите: "BELIY_CVET"/datigrokuaksy {ID игрока} {ID аксессуара}");
print("Проверка sscanf прошла"); // Последнее, что мы видим в консоли
// Вот наша функция printf
printf("Результат выполнения функции fulldostup для игрока ID %i, - %i", playerid, fulldostup(playerid));
if(!fulldostup(playerid)) return 0; // Это условие уже не выполняется
print("Проверка на фулл доступ прошла");
AttachAksNaIgroka(params[0], params[1]);
print("Аксессуар был прицеплен к игроку");
new stringer[4096];
print("Переменная была создана");
format(stringer, 2048, ""ZELENIY_CVET"Администратор %s выдал вам аксессуар "ШЛЯПА"", GetImyaIgroka(playerid));
print("Отформатировали строку");
SCM(params[0], BELIY_CVET, stringer);
print("Команда выполнена успешно");
return 1;
}
Запускаем, вводим команду /datigrokuaksy 24 10, опять же ничего не происходит. Смотрим в консоль:
Команда вызвана
Проверка sscanf прошла
Результат выполнения функции fulldostup для игрока ID 23, — 0
И видим что проблема в нашей функции. Смотрим — а фулл доступ то мы себе и не дали, т.к. мы уже скачали новую копию аризоны и еще не настроили ее.
Вот так просто с помощью функций print и printf можно находить ошибки и исправлять их самостоятельно, без создания темы с вопросом и ожиданием ответа сутками.
-
14.06.2014, 19:16
#1
Пользователь
Как узнать строку ошибки?
забыл что делать, что бы писало на каких строках в моде эти ошибки
[18:08:32] [debug] Run time error 4: «Array index out of bounds»
[18:08:32] [debug] Accessing element at index 1 past array upper bound 0
[18:08:32] [debug] AMX backtrace:
[18:08:32] [debug] #0 0003ed60 in ?? () from spell.amx
[18:08:32] [debug] #1 00008120 in public Itter_OnGameModeInit () from spell.amx
[18:08:32] [debug] #2 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #3 00006f7c in public SSCANF_OnGameModeInit () from spell.amx
[18:08:32] [debug] #4 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #5 00001000 in public Streamer_OnGameModeInit () from spell.amx
[18:08:32] [debug] #6 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #7 0000074c in public OnGameModeInit () from spell.amx
-
14.06.2014, 19:27
#2
Сообщение от Steven_Davidson
забыл что делать, что бы писало на каких строках в моде эти ошибки
[18:08:32] [debug] Run time error 4: «Array index out of bounds»
[18:08:32] [debug] Accessing element at index 1 past array upper bound 0
[18:08:32] [debug] AMX backtrace:
[18:08:32] [debug] #0 0003ed60 in ?? () from spell.amx
[18:08:32] [debug] #1 00008120 in public Itter_OnGameModeInit () from spell.amx
[18:08:32] [debug] #2 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #3 00006f7c in public SSCANF_OnGameModeInit () from spell.amx
[18:08:32] [debug] #4 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #5 00001000 in public Streamer_OnGameModeInit () from spell.amx
[18:08:32] [debug] #6 native CallLocalFunction () [080dc700] from samp03svr
[18:08:32] [debug] #7 0000074c in public OnGameModeInit () from spell.amxПодключи Сrashdetect
-
14.06.2014, 19:32
#3
Пользователь
нет, я не то имел ввиду, я хотел спросить как узнать на какие строчки в моде ругается crashdetected— — — Добавлено — — —
файл в папке pawno создаешь и туда что то вписываешь %d вроде вот хотел бы уточнить, что там создать нужно и вписать туда?
-
14.06.2014, 19:43
#4
Создаёте файл pawn с расширением .cfg в папке pawno и прописываете туда: -d3, заново компилируете мод и всё.
-
Пользователь сказал cпасибо:
-
14.06.2014, 19:46
#5
Пользователь
error 001: expected token: "%s", but found "%s" - ожидался символ: "%s", но был найден "%s";
error 002: only a single statement (or expression) can follow each "case" - только одно заявление (или выражение) могут следовать за "case";
error 003: declaration of a local variable must appear in a compound block - объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function "%s" is not implemented - функция %s не реализована;
error 005: function may not have arguments - функция не имеет аргументов;
error 006: must be assigned to an array - должен быть присвоен массив;
error 007: operator cannot be redefined - оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero - должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) - неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration - неизвестная функция или декларация;
error 011: invalid outside functions - неверно вне функции;
error 012: invalid function call, not a valid address - неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) - нет точки входа (не public функция);
error 014: invalid statement; not in switch - неверный оператор; не в switch;
error 015: "default" case must be the last case in switch statement - "default" должен быть последним условием в switch;
error 016: multiple defaults in "switch" - несколько "default" в switch;
error 017: undefined symbol "%s" - неизвестный символ "%s";
error 018: initialization data exceeds declared size - данные массива превышают его размер;
error 019: not a label: %s" - не метка "%s";
error 020: invalid symbol name "%s" - неверное имя символа "%s";
error 021: symbol already defined: %s" - символ уже объявлен: "%s";
error 022: must be lvalue (non-constant) - должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment - назначение массива должно быть простым;
error 024: "break" or "continue" is out of context - "break" или "continue" вне контекста;
error 025: function heading differs from prototype - функция заголовка отличается от прототипа;
error 026: no matching "#if..." - не найдено "#if...";
error 027: invalid character constant - недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): "%s" - неверный индекс (это не массив или слишком много индексов): "%s";
error 029: invalid expression, assumed zero - неверное выражение, нет результата;
error 030: compound statement not closed at the end of file - составной оператор не закрыт в конце файла;
error 031: unknown directive - неизвестная директива;
error 032: array index out of bounds (variable "%s") - индекс массива превышен;
error 033: array must be indexed (variable "%s") - массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) - аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) - несоответствие типа аргумента (аргумент %d);
error 036: empty statement - пустой оператор;
error 037: invalid string (possibly non-terminated string) - неправильная строка;
error 038: extra characters on line - лишние символы в строке;
error 039: constant symbol has no size - символьная константа не имеет размера;
error 040: duplicate "case" label (value %d) - несколько раз объявлен "case" с одним тем же параметром;
error 041: invalid ellipsis, array size is not known - размер массива неизвестен;
error 042: invalid combination of class specifiers - недопустимое сочетание класса;
error 043: character constant exceeds range for packed string - символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters - позиционные параметры должны предшествовать всем именованным параметрам;
error 045: too many function arguments - слишком много аргументов у функции;
error 046: unknown array size (variable "%s") - неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small - размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match - размеры массива не совпадают;
error 049: invalid line continuation - неправильное продолжение строки;
error 050: invalid range - неверный диапазон;
error 051: invalid subscript, use "[ ]" operators on major dimensions - неправильный индекс, используйте "[]";
error 052: multi-dimensional arrays must be fully initialized - много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions - превышение максимального числа измерений;
error 054: unmatched closing brace - не найдена закрывающаяся скобка;
error 055: start of function body without function header - начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable "%s") - массивы, локальные переменные и аргументы функции не могут быть общедоступными;
error 057: unfinished expression before compiler directive - незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice - дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable "%s") - аргумент не может иметь значение по-умолчанию;
error 060: multiple "#else" directives between "#if ... #endif" - Несколько "#else" между "#if ... #endif" - несколько "#else" между "#if и #endif";
error 061: "#elseif" directive follows an "#else" directive - "#else" перед "#elseif";
error 062: number of operands does not fit the operator - количество операндов не соответствует оператору;
error 063: function result tag of operator "%s" must be "%s" - Результат функции %s должен быть %s;
error 064: cannot change predefined operators - невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) - в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument "%s") - аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable "%s") - Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma - неверное число в #pragma;
error 069: rational number format already defined - формат рационального числа уже определен;
error 070: rational number support was not enabled - рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function "%s") - объявленный оператор должен быть перед использованием;
error 072: "sizeof" operator is invalid on "function" symbols - оператор "sizeof" не может быть использован для символов функции;
error 073: function argument must be an array (argument "%s") - аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character - #define должен начинаться с буквы;
error 075: input line too long (after substitutions - введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call - неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s - плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both "return" and "return <value>" - функция использует "return" и "return <значение>";
error 079: inconsistent return types (array & non-array) - несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol "%s") - неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol "%s") - не может принимать тег в качестве значения по умолчанию для параметра индексированного массива;
error 082: user-defined operators and native functions may not have states - созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol "%s") - функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol "%s") - конфликт состояния: одно из состояний уже назначено на другую реализацию;
error 085: no states are defined for function "%s" - нет состояний, определенных для функции "%s";
error 086: unknown automaton "%s" - неизвестная автоматизация "%s";
error 087: unknown state "%s" for automaton "%s" - неизвестное состояние "%s" в автоматизации "%s";
error 088: number of arguments does not match definition - количество аргументов не совпадает с объявленными в функции;
Ошибка: error 001: expected token: «;», but found «бла-бла»
Решение: Идём на строку выше той, что указана в ошибке и ставим в конце ; (точку с запятой).
Ошибка: error 021: symbol already defined: «бла-бла» или warning 219: local variable «бла-бла» shadows a variable at a preceding level
Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную,stock,public.Для решения вам просто требуется удалить дубликат.
Ошибка: error 024: «break» or «continue» is out of context
Решение: break,continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно просто заменить их.
Ошибка: error 032: array index out of bounds (variable «cartek»)
Решение: Ошибка появляется, если у вас превышен индекс массива. Для решение вам просто надо увеличить ‘число’ в создании массива.
Ошибка: error 040: duplicate «case» label (value %d)
Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.
Ошибка: fatal error 100: cannot read from file: «бла-бла»
Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.
Ошибка: warning 203: symbol is never used: «бла-бла»
Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.
Ошибка: warning 209: function «бла-бла» should return a value
Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.
Ошибка: warning 217: loose indentation
Решение: Для решения проблемы выровняйте строки.
Ошибка: warning 235: public function lacks forward declaration (symbol «бла-бла»)
Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.
По мере возможности тема будет дополняться