Проверенный
Пользователь
- Сообщения
- 1,536
- Реакции
- 2,324
- Помог
- 39 раз(а)
Автор: minimiller
Перевод и редактирование: DJ_WEST
Источники: amx-x
Добавлено: Весь список ошибок и предупреждений, перевод части id
[TBODY]
[/TBODY]
[TBODY]
[/TBODY]
[TBODY]
[/TBODY]
Разбор ошибок
Рассмотрим пример нахождения и самостоятельного решения ошибок при компиляции.
Допустим у нас есть ошибка:
Теперь давайте попытаемся разобрать эту ошибку по частям:
Итого, получаем: в файле example.sma, который находится в директории C:\AMXX, в строке под номером 107 есть ошибка с кодом 035, которая означает, что аргумент 2 имеет неверный тип данных.
Решение ошибок
Теперь попытаемся исправить нашу ошибку. Идем в строку под номером 107 и видим следующий код:
Идем на http://www.amxmodx.org/api/amxmodx/client_print и читаем описание функции:
[TBODY]
[/TBODY]
Смотрим синтаксис команды client_print и видим, что первый аргумент index - это номер игрока (id), который может быть от 1 до 32, если же он 0, то сообщение будет отсылаться всем игрокам на сервере. Второй аргумент type - это тип сообщения, который может быть:
Третий аргумент message - это и есть текст нашего сообщения. Теперь вернемся, к нашему, коду. Мы видим, что у нас нет второго аргумента (тип сообщения), а сразу идет текст сообщения, исправляем на:
Теперь компиляция прошла успешно.
Описание ошибок:
error 001: expected token: "X", but found "Y"
Ошибка означает, что не найден X, когда найден Y. Наиболее часто возникает, когда забывают поставить недостающие знаки
Пример ошибки:
error 017: undefined symbol "X"
Ошибка означает, что X - неизвестный символ/команда/переменная/функция. Поэтому такую функцию или переменную нужно объявить перед использованием. Например, функция is_user_hacker не существует.
Пример ошибки:
error 032: array index out of bounds (variable X)
Ошибка означает, что мы вышли за предел размера массива X.
Пример ошибки:
error 033: array must be indexed (variable X)
Ошибка означает, что массив должен быть проиндексирован. Например, мы не указали размер массива при его объявлении.
Пример ошибки:
error 035: argument type mismatch (argument X)
Ошибка означает, что аргумент X имеет неверный тип данных. Например, когда вместо целочисленного аргумента передаем строку.
Пример ошибки:
error 040: duplicate "case" label (value X)
Ошибка означает, что имеется дубль оператора case со значением X.
Пример ошибки:
error 075: input line too long (after substitutions)
Ошибка означает, что указанная строка слишком длинная. Например, около 500 символов.
Пример ошибки:
error 078: function uses both "return" and "return <value>"
Ошибка означает, что функция использует, как return, так и return <значение>.
Пример ошибки:
error 088: number of arguments does not match definition
Ошибка означает, что количество переданных аргументов не соответствует количеству объявленных аргументов.
Пример ошибки:
Перевод и редактирование: DJ_WEST
Источники: amx-x
Добавлено: Весь список ошибок и предупреждений, перевод части id
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") | массивы, локальные переменные и аргументы функции не могут быть общедоступными (переменная «% 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" |
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 pattern 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") | Нельзя взять значение в массив %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") | для функции %s уже определенна данная state |
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 definitionn | количество аргументов не совпадает с объявленными в функции |
fatal error 100 | cannot read from file: "%s" | невозможно прочитать из файла "%s" |
fatal error 101 | cannot write to file: "%s" | невозможно записать в файл "%s" |
fatal error 102 | table overflow: "%s" /* table can be: loop table * literal table * staging buffer * option table (response file) * peephole optimizer table */ | переполнение таблицы: "% s" |
fatal error 103 | insufficient memory | недостаточно памяти |
fatal error 104 | invalid assembler instruction "%s" | неверная инструкция ассемблера "% s" |
fatal error 105 | numeric overflow, exceeding capacity | числовое переполнение, превышающее емкость |
fatal error 106 | compiled script exceeds the maximum memory size (%ld bytes) | скомпилированный скрипт превышает максимальный размер памяти (% ld bytes) |
fatal error 107 | too many error messages on one line | слишком много сообщений об ошибке в одной строке |
fatal error 108 | codepage mapping file not found | |
fatal error 109 | invalid path: "%s" | неверный путь: "% s" |
fatal error 110 | assertion failed: %s | утверждение не выполнено:% s |
fatal error 111 | user error: %s | |
fatal error 112 | specify either all dimensions or only the last dimension |
warning 200 | symbol "%s" is truncated to %d characters | название переменной "%s" обрезано до "%d" символа |
warning 201 | redefinition of constant/macro (symbol "%s") | переопределение константы / макроса |
warning 202 | number of arguments does not match definition | несовпадение количества аргументов |
warning 203 | symbol is never used: "%s" | переменная никогда не использовалась |
warning 204 | symbol is assigned a value that is never used: "%s" | переменной установлено значение, которое никогда не использовалось |
warning 205 | redundant code: constant expression is zero | избыточный код: константа равна нулю |
warning 206 | redundant test: constant expression is non-zero | избыточный тест: постоянное выражение не равно нулю |
warning 207 | unknown #pragma | неизвестно #pragma |
warning 208 | function with tag result used before definition, forcing reparse | функция с типовым результатом используется перед объявлением |
warning 209 | function "%s" should return a value | функция "%s" ничего не возвращает |
warning 210 | possible use of symbol before initialization: "%s" | возможное использование символа перед инициализацией: «% s» |
warning 211 | possibly unintended assignment | в условии использовано не сравнение, а присвоение |
warning 212 | possibly unintended bitwise operation | |
warning 213 | tag mismatch | несоответствие аргументов |
warning 214 | possibly a "const" array argument was intended: "%s" | возможно «const» аргумент массива был предназначен: «% s» |
warning 215 | expression has no effect | выражение не имеет смысла |
warning 216 | nested comment | вложенный комментарий (вынесите его за функцию) |
warning 217 | loose indentation | не выровненная строка |
warning 218 | old style prototypes used with optional semicolumns | |
warning 219 | local variable "%s" shadows a variable at a preceding level | локальная переменная "%s" встречается на предыдущем уровне |
warning 220 | expression with tag override must appear between parentheses | выражение с переопределением тега должно появляться между круглыми скобками |
warning 221 | label name "%s" shadows tag name | |
warning 222 | number of digits exceeds rational number precision, | |
warning 223 | redundant "sizeof": argument size is always 1 (symbol "%s") | избыточный «sizeof»: размер аргумента всегда равен 1 (переменная «% s») |
warning 224 | indeterminate array size in "sizeof" expression (symbol "%s") | неопределенный размер массива в "sizeof" выражении (переменная "%s") |
warning 225 | unreachable code | невыполнимый код |
warning 226 | a variable is assigned to itself (symbol "%s") | переменная присваивается сама себе (переменная "%s") |
warning 227 | more initiallers than enum fields | в массиве больше элементов, чем указано в enum |
warning 228 | length of initialler exceeds size of the enum field | размер данных в массиве превышает размер поля типа enum |
warning 229 | index tag mismatch (symbol "%s") | несоответствие тега индекса |
warning 230 | no implementation for state "%s" / function "%s", no fall-back | в реализации state отсутствует состояние "%s" в функции "%s" |
warning 231 | state specification on forward declaration is ignored | |
warning 232 | output file is written, but with compact encoding disabled | файл сохранен без сжатия |
warning 233 | symbol "%s" is marked as deprecated: %s | символ «% s» отмечен как устаревший:% s |
warning 234 | recursive function "%s" | рекурсивная функция "% s" |
Разбор ошибок
Рассмотрим пример нахождения и самостоятельного решения ошибок при компиляции.
Допустим у нас есть ошибка:
Код:
C:\AMXX\example.sma(107) : error 035: argument type mismatch (argument 2)
Теперь давайте попытаемся разобрать эту ошибку по частям:
- C:\AMXX\example.sma - это директория, где находится исходник (.sma) нашего плагина.
- (107) - это номер строки, в которой есть ошибка. Большинство современных редакторов текста имеют панель с пронумерованными строками (Notepad++, AMXX-Studio и другие).
- error 035 - это код ошибки (список ошибок указан выше).
- argument type mismatch - это описание ошибки с кодом, указанным до этого. В данном случае нам говорится, что "аргумент имеет неверный тип".
- (argument 2) - это более подробное описание ошибки. В данном случае нам указывается, что ошибка во 2 аргументе.
Итого, получаем: в файле example.sma, который находится в директории C:\AMXX, в строке под номером 107 есть ошибка с кодом 035, которая означает, что аргумент 2 имеет неверный тип данных.
Решение ошибок
Теперь попытаемся исправить нашу ошибку. Идем в строку под номером 107 и видим следующий код:
Код:
client_print(0, "Welcome to the server!")
Идем на http://www.amxmodx.org/api/amxmodx/client_print и читаем описание функции:
Код:
native client_print(index, type, const message[], any:...);
index | Client index, use 0 to display to all clients |
type | Message type, see print_* destination constants in amxconst.inc |
message | Formatting rules |
... | Variable number of formatting parameters |
Код:
print_notify = 1,
print_console,
print_chat,
print_center,
print_radio /* Counter-Strike only */
Третий аргумент message - это и есть текст нашего сообщения. Теперь вернемся, к нашему, коду. Мы видим, что у нас нет второго аргумента (тип сообщения), а сразу идет текст сообщения, исправляем на:
Код:
client_print(0, print_center, "Welcome to the server!")
Теперь компиляция прошла успешно.
Описание ошибок:
error 001: expected token: "X", but found "Y"
Ошибка означает, что не найден X, когда найден Y. Наиболее часто возникает, когда забывают поставить недостающие знаки
;
{ }
( )
.Пример ошибки:
Код:
public Function(id)
{
if (is_user_bot(id)
return PLUGIN_HANDLED
// код
return PLUGIN_CONTINUE
}
error 017: undefined symbol "X"
Ошибка означает, что X - неизвестный символ/команда/переменная/функция. Поэтому такую функцию или переменную нужно объявить перед использованием. Например, функция is_user_hacker не существует.
Пример ошибки:
Код:
public Function(id)
{
if (is_user_hacker(id))
return PLUGIN_HANDLED
// код
return PLUGIN_CONTINUE
}
error 032: array index out of bounds (variable X)
Ошибка означает, что мы вышли за предел размера массива X.
Пример ошибки:
Код:
new s_Name[32]
s_Name[33] = "*"
error 033: array must be indexed (variable X)
Ошибка означает, что массив должен быть проиндексирован. Например, мы не указали размер массива при его объявлении.
Пример ошибки:
Код:
new s_String = "My string"
error 035: argument type mismatch (argument X)
Ошибка означает, что аргумент X имеет неверный тип данных. Например, когда вместо целочисленного аргумента передаем строку.
Пример ошибки:
Код:
public Function1(id)
{
Function2(id, "10")
}
public Function2(id, count)
{
// код
}
error 040: duplicate "case" label (value X)
Ошибка означает, что имеется дубль оператора case со значением X.
Пример ошибки:
Код:
public Function(id)
{
switch(count)
{
case 1: count += 1
case 2: count += 2
case 2: count += 3
}
}
error 075: input line too long (after substitutions)
Ошибка означает, что указанная строка слишком длинная. Например, около 500 символов.
Пример ошибки:
Код:
public Function(id)
{
server_print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
}
error 078: function uses both "return" and "return <value>"
Ошибка означает, что функция использует, как return, так и return <значение>.
Пример ошибки:
Код:
public Function(id)
{
if (is_user_alive(id))
return
return PLUGIN_HANDLED
}
error 088: number of arguments does not match definition
Ошибка означает, что количество переданных аргументов не соответствует количеству объявленных аргументов.
Пример ошибки:
Код:
public Function1(id)
{
Function2(id)
}
public Function2(id, count)
{
// код
}
Просьба сообщить о ошибках или недочетах.