Как найти ошибки в pawno

Список часто встречаемых ошибок в 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 можно находить ошибки и исправлять их самостоятельно, без создания темы с вопросом и ожиданием ответа сутками.


  1. 14.06.2014, 19:16


    #1

    Аватар для 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



  2. 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



  3. 14.06.2014, 19:32


    #3

    Аватар для Steven_Davidson

    Пользователь


    нет, я не то имел ввиду, я хотел спросить как узнать на какие строчки в моде ругается crashdetected— — — Добавлено — — —

    файл в папке pawno создаешь и туда что то вписываешь %d вроде вот хотел бы уточнить, что там создать нужно и вписать туда?



  4. 14.06.2014, 19:43


    #4

    Создаёте файл pawn с расширением .cfg в папке pawno и прописываете туда: -d3, заново компилируете мод и всё.



  5. Пользователь сказал cпасибо:


  6. 14.06.2014, 19:46


    #5

    Аватар для Steven_Davidson

    Пользователь



 

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.

По мере возможности тема будет дополняться

Понравилась статья? Поделить с друзьями:
  • Как найти ошибка в построении предложения с деепричастным оборотом
  • Как найти относительную ошибку формула
  • Как найти относительную ошибку погрешности
  • Как найти относительную ошибку опыта
  • Как найти относительную ошибку определения