Jump to content

[PAWN] Erori și avertismente


ZeCo
 Share

Recommended Posts

I. Erori



Descriu situatiile în care compilatorul este în imposibilitatea de a genera un cod corespunzător.

Mesajele de Eroare sunt numerotate de la 1 la 99.



II. Erori Fatale



Erori fatale descriu erorile ce afecteaza compilarea provocand daune majore scriptului.

Compilarea este abandonată.

Mesajele de eroare fatale sunt numerotate de 100 la 199.



III. Avertismente



Avertismentele sunt afisate atunci cand compilerul gaseste o linie eronata, dar nu indeajuns de eronata incat sa dea o eroare si sa abandoneze compilarea scriptului.

Mesajele de avertizare sunt numerotate de 200 la 299.




Avem mai jos o lista cu toate erorile si avertismentele din pawno, si tot mai jos avem si explicatii la unele dintre ele.



error 001: expected token: "%s", but found "%s";

error 002: only a single statement (or expression) can follow each "case";

error 003: declaration of a local variable must appear in a compound block;

error 004: function "%s" is not implemented;

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);

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);

error 014: invalid statement; not in switch;

error 015: "default" case must be the last case in switch statement;

error 016: multiple defaults in "switch";

error 017: undefined symbol "%s";

error 018: initialization data exceeds declared size;

error 019: not a label: %s";

error 020: invalid symbol name "%s";

error 021: symbol already defined: %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;

error 025: function heading differs from prototype;

error 026: no matching "#if...";

error 027: invalid character constant -;

error 028: invalid subscript (not an array or too many subscripts): %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;

error 035: argument type mismatch (argument %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);

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";

error 061: "#elseif" directive follows an "#else" directive;

error 062: number of operands does not fit the operator;

error 063: function result tag of operator "%s" must be "%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;

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;

error 073: function argument must be an array (argument "%s");

error 074: #define pattern must start with an alphabetic character;

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;

error 078: function uses both "return" and "return ";

error 079: inconsistent return types (array & non-array);

error 080: unknown symbol, or not a constant symbol (symbol "%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";

error 086: unknown automaton "%s";

error 087: unknown state "%s" for automaton "%s";

error 088: number of arguments does not match definition;



fatal error 100: cannot read from file: "%s";

fatal error 107: too many error messages on one line;



warning 200: symbol "%s" is truncated to 31 characters;

warning 201: redefinition of constant/macro (symbol "%s");

warning 202: number of arguments does not match definition;

warning 204: symbol is assigned a value that is never used: "%s";

warning 209: function "%s" should return a value;

warning 211: possibly unintended assignment;

warning 213: tag mismatch;

warning 215: expression has no effect;

warning 216: nested comment;

warning 217: loose indentation;

warning 219: local variable "%s" shadows a variable at a preceding level;

warning 224: indeterminate array size in "sizeof" expression (symbol "%s");

warning 225: unreachable code;

warning 235: public function lacks forward declaration (symbol "%s");


____________________________________

I. Erori comune (Common Errors)


001: expected token


Un cod necesar este absent.


Exemplu:


error 001: expected token: ";", but found "return"



main()
{
print("test") //In aceasta linie lipseste caracterul necesar ";" de la sfarsitul liniei.
return 1; //La aceasta linie se refera eroarea de mai sus, adica ";" lipsa se afla deasupra acestei linii.
}


002: only a single statement (or expression) can follow each "case"


Fiecare "case" dintr-un "switch" poate detine doar o singura declaratie.

Pentru a pune mai multe declaratii într-un "case", includeti aceste declaratii între acolade.


Exemplu eroare:



main()
{
switch(x)
{
case 0: print("hello"); print("hello");
}
return 1;
}




Codul de mai sus produce, de asemenea, alte avertismente / erori:


error 002: only a single statement (or expression) can follow each "case"

warning 215: expression has no effect

error 010: invalid function or declaration




Reparare:



main()
{
switch(x)
{
case 0:
{ //acolada in care este inclusa declaratia.
print("hello"); //continutul
print("hello");
} //acolada in care este inclusa declaratia.
}
return 1;
}



error 017: undefined symbol ""


Compilerul afiseaza aceasta eroare atunci cand folositi un simbol care nu este definit.


Exemplu:



CMD:myname(playerid,params[])
{
#pragma unused params
GetPlayerName(playerid,Playername,sizeof(Playername));
SendClientMessage(playerid,-1,Playername);
return 1;
}


Observam ca mai sus am folosit PlayerName, dar nu este definit acel PlayerName.


Rezolvare:



CMD:myname(playerid,params[])
{
#pragma unused params
new Playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
SendClientMessage(playerid,-1,Playername);
return 1;
}




Observam ca linia 4 este adaugata, adica am definit simbolul PlayerName.

____________________________________


error 021: symbol already defined:


Compilerul afiseaza aceasta eroare atunci cand un simbol este definit de mai multe ori, adica este folosit in mai multe parti cand ar trebui doar intr-un loc.



Exemplu:



CMD:myname(playerid,params[])
{
new Playername[MAX_PLAYER_NAME];
#pragma unused params
new Playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,Playername,sizeof(Playername));
SendClientMessage(playerid,-1,Playername);
return 1;
}



Observam ca mai sus avem new PlayerName de doua ori, acest caz este unul foarte simplu de rezolvat, doar stergand linia 3 sau inlocuind de exemplu new playername cu new playernamer, trebuind inlocuit in tot scriptul playername cu playernames.


Rezolvare:



CMD:myname(playerid,params[])
{
#pragma unused params
new Playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,Playername,sizeof(Playername));
SendClientMessage(playerid,-1,Playername);
return 1;
}



Sau



CMD:myname(playerid,params[])
{
new Playername[MAX_PLAYER_NAME];
#pragma unused params
new Playernamer[MAX_PLAYER_NAME];
GetPlayerName(playerid,Playernamer,sizeof(Playernamer));
SendClientMessage(playerid,-1,Playername);
return 1;
}




Dar in acest caz vom primi Symbol is never used: "playername", asa ca vom sterge de aceasta data new playername pentru ca nu il folosim.


________________________________________


35: argument type mismatch (argument x)


Un argument este adoptat la o functie unde nu este necesar acel argument.

De exemplu este intr-un sir in care ar trebui sa fie un Integer.


Exemplu:


error 035: argument type mismatch (argument 1)



Kick("playerid"); // Am pus ca fiind un STRING, pe cand este o variabila INTEGER. Observam ca are acele caractere " in plus.



Rezolvarea:



Kick(playerid);




____________________________________


047: array sizes do not match, or destination array is too small


rray-ul alocat este mai mic decat trebuie.


Nota:Pentru array-urile multi-dimensionale, ambele array-uri trebuie să aibă aceeasi dimensiune.

Pentru array-urile simple cu o singură dimensiune, array-ul trebuie sa aiba o dimensiune mai mare sau egala cu dimensiunea necesara.


Exemplu:



new destination[8];
new msg[] = "Hello b-zone";




In codul de mai sus, vom încerca sa punem 14 caractere într-un array care poate suporta doar 8.

Prin mărirea dimensiunii acestuia, putem rezolva acest lucru.

NOTA:Retineti că un sir necesită, de asemenea, un terminator nul astfel încât lungimea totală a "Hello PAWNO!" plus terminatorul nul este, de fapt, 14.


Rezolvare:



new destination[14];
new msg[] = "Hello World!";
destination = msg;




____________________________________


II. Erori fatale(Fatal error)

Erori fatale comune(Common Fatal Errors)


100: cannot read from file: "<file>"


Compilerul nu poate gasi sau citi o fila din folderul Include.


Rezolvare:


Cautam pe internet fila necesara(ex: zcmd, beazone, sscanf2, a_mysql etc), dupa ce am gasit si descarcat fila o introducem in folderul include.

Folderul include il putem localiza usor, el fiind in Pawno/include, adica in folderul cu compilerul.


NOTA:Puteti intampina aceasta problema si daca aveti mai multe copii ale pawno in calculator. Puteti da click dreapta pe fisierul .pwn dupa care ne ducem pe open with.

Acolo selectam browse si ne apare sa selectam programul, noi ducandu-ne la programul pawno cu care dorim sa compilam fila.



____________________________________


III. Avertismente(warnings)


Avertismente comune(Common Warnings)


211: possibly unintended assignment


Apare daca folosim simbolul de atribuire (=) in locul simbolului de egalitate (==).

NOTA:In cazul in care avem nevoie de simbolul de atribuire (=) acesta trebuie sa se afle intre alte doua paranteze.


Exemplu:



if(a = 2) // Avertizare
if(a == 2) // nici un avertisment
if((a = 2)) // nici un avertisment, valoarea 2 va fi atribuit la o variabilă si expresia va da tot timpul return true.




____________________________________


213: tag mismatch


Compilatorul emite aceasta avertizare atunci cand nu poate identifica intreaga linie ca fiind functionala, mai pe intelesul tuturor, linia este incompleta.


Exemplu:



SendClientMessage(playerid,"hudson"); //Observam ca aceasta linie este incompleta(ii lipseste parametrul pentru culoare).



Rezolvare:



SendClientMessage(playerid,-1,"hudson"); //Am adaugat parametrul culoare, acesta fiind -1 (alb).



____________________________________


217: loose indentation


Compilatorul va emite această avertizare în cazul în care codul de identificare este "liber", adica se afla in linii diferite.


Exemplu:



if(condition)
{
action();
result();
}




Rezolvare:



if(condition)
{
action();
result();
}




Identification inseamna a "impinge" o codul pana ajunge in linia verticala cu celelalte coduri(prin apasarea tastei tab).

Aceasta este o practică comună în programare pentru a face codul mai usor de citit. Acest avertisment există, de asemenea, pentru a evita asezarea inegala.

____________________________________



225: unreachable code


Compilatorul returneaza aceasta eroare atunci cand scriptul este returnat inainte de a ajunge la sfarsitul scriptului.


Exemplu:



public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(vehicleid == 520)
{
SendClientMessage(playerid,-1,"Tu ai intrat in masina lui Cires");
return 1;
}
else return 0; //Observam ca aceasta linie este plasata aiurea aici deoarece ea returneaza 0, iar compilerul nu poate citi tot scriptul fiind impiedicat de aceasta linie.
return 1;
}




Rezolvare:



public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(vehicleid == 520)
{
SendClientMessage(playerid,-1,"Tu ai intrat in masina lui Cires");
return 1
}
return 1;
}




Diferentele sunt vizibile, am sters linia la care era "else return 0;".



____________________________________


216: nested comment


Compilerul returneaza aceasta eroare atunci cand folosim un comentariu, introdus in alt comentariu.Intelegeti mai multe din exemplul de mai jos.


Exemplu:



Public OnPlayerConnect(playerid)
{
/*SendClientMessage(playerid,-1,"Mesaj Valoros");
/*TextDrawShowForPlayer(playerid,textdrawvaloros);
SendClientMessage(playerid,-1,"Nu ai valoare"*/
}



Observam ca la linia cu numarul 3 am folosit /* pentru a adauga un comentariu, adica compilerul nu va mai lua acele linii ca fiind un script, ci trece de ele ca fiind inexistente.

Dar in cazul in care avem inca un comentariu (/*) introdus in comentariul care nu a fost inchis vom primi aceasta avertizare.


Rezolvare:



public OnPlayerConnect(playerid)
{
/*SendClientMessage(playerid,-1,"Mesaj Valoros");
TextDrawShowForPlayer(playerid,textdrawvaloros);
SendClientMessage(playerid,-1,"Nu ai valoare"*/
}



Observam ca mai sus nu mai avem doua /* si doua */, ceea ce inseamna un singur comentariu si totodata rezolvarea avertismentului.


NOTA:Puteti trece cu vederea aceasta eroare, pentru ca nu afecteaza in nici un fel compilarea.

____________________________________


warning 202: number of arguments does not match definition


Aceasta avertizare o afiseaza compilerul atunci cand o linie are mai mult sau mai putine argumente decat ar fi nevoie.


Exemplu:



public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,"/middle",true))
{
SetPlayerPos(playerid,0.0,0.0,3.0,8.0,3.0);
return 1;
}
return 0;
}



Observam ca la linia 5 avem mai multe argumente decat este normal.

Puteti verifica pe wiki.sa-mp.com, in cazul nostru SetPlayerPos. wiki.sa-mp.co...ki/SetPlayerPos" target="_blank

Deci noi avem nevoie doar de :

playerid, Float:x, Float:y, Float:z. Adica 4 argumente, mai sus avem 6 argumente.


Rezolvare:



public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,"/middle",true))
{
SetPlayerPos(playerid,0.0,0.0,3.0);
return 1;
}
return 0;
}




____________________________________


warning 203: symbol is never used: "string[128]"



Compilerul afiseaza aceasta avertizare atunci cand o functie nu este folosita in gamemod, dar totusi ea exista.


Exemplu:



CMD:skydive(playerid,params[])
{
#pragma unused params
new Float:Pos[3];
new string[128]; //Observam ca in scriptul nostru nu este folosit nicaieri acest string.
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2] + 200);
SendClientMessage(playerid,-1,"Ai fost teleportat intr-un loc de valoare.");
GivePlayerWeapon(playerid,46,1);
return 1;
}


Rezolvare:



CMD:skydive(playerid,params[])
{
#pragma unused params
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2] + 200);
SendClientMessage(playerid,-1,"Ai fost teleportat intr-un loc de valoare");
GivePlayerWeapon(playerid,46,1);
return 1;
}




Observam ca am sters acea linie new string[128], asa puteti face si voi cand intampinati aceasta avertizare.

Daca voua va apare de exemplu warning 203: symbol is never used: "textdraw2" cautati in script textdraw2 si il stergeti sau puteti pune #pragma unused textdraw2.




CREDITE: Hudson, FollowYou

Edited by iHudson
Link to comment
Share on other sites

Linia asta m-a facut sa rad putin:

SendClientMessage(playerid,-1,"Mesaj Valoros");

In fine, pentru a evita spamul in acest topic, o sa-l inchid.

 

Topic closed

Link to comment
Share on other sites

  • Tupi pinned this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.