Introdução
O YSI usa MUITAS macros para tornar as coisas mais fáceis de escrever. A desvantagem disso é que pode tornar os erros e avisos muito difíceis de interpretar, pois eles se referirão ao código após a substituição da macro. Este guia deve ajudá-lo a traduzir os erros fornecidos para os erros reais.
Acrescentarei mais à medida que me tornar consciente deles.
Erros e avisos
1)
O YSI usa MUITAS macros para tornar as coisas mais fáceis de escrever. A desvantagem disso é que pode tornar os erros e avisos muito difíceis de interpretar, pois eles se referirão ao código após a substituição da macro. Este guia deve ajudá-lo a traduzir os erros fornecidos para os erros reais.
Acrescentarei mais à medida que me tornar consciente deles.
Erros e avisos
1)
- Código
peão Код:
- Código:
// Alternativo:
//CMD:kickplayer(playerid, params[])
YCMD : kickplayer ( playerid, params [ ] , help ) // Linha de aviso.
{
// Algum código aqui.
}
- Problema
Код:
- Código:
<path>\errors.pwn(11): aviso 203: o símbolo nunca é usado: "kickplayer"
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Aviso.
- Solução
Você não incluiu "YSI\y_commands". Os comandos nunca são chamados explicitamente em nenhum lugar do código, então o compilador precisa ser informado de que eles serão chamados eventualmente.
peão Код:- Código:
#include <YSI\y_commands>
2)
- Código
peão Код:
- Código:
timer X ( ) // Linha de erro.
{
}
- Problema
Код:
- Código:
<caminho>\errors.pwn(3): erro 010: função ou declaração inválida
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
Nesse caso, a mensagem de erro é bastante descritiva. É uma declaração inválida - não há atraso especificado para o cronômetro.
peão Код:- Código:
temporizador X [ 100 ] ( )
{
}
3)
- Código
peão Код:
- Código:
X [ 100 ] ( ) // Linha de erro.
{
}
- Problema
Код:
- Código:
<caminho>\errors.pwn(3): erro 010: função ou declaração inválida
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
Problema muito semelhante ao anterior, só que desta vez faltando a palavra-chave "timer" em vez do tempo.
peão Код:- Código:
temporizador X [ 100 ] ( )
{
}
4)
- Código
peão Код:
- Código:
timer X [ 100 ] ( arr [ ] ) // Linha de erro.
{
}
- Problema
Код:
- Código:
<caminho>\errors.pwn(3): erro 010: função ou declaração inválida
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
Você tem a sintaxe correta com "timer" e o tempo, mas AINDA obtém uma declaração inválida. Este é realmente outro erro útil dizendo a verdade. Todos os arrays nas funções "timer", "global" e "remotefunc" DEVEM ser seguidos por seu comprimento. As strings NÃO precisam de seu comprimento, mas DEVEM ser declaradas como "string:", caso contrário, o compilador não poderá diferenciá-las.
peão Код:- Código:
[size=14][size=13]timer X [ 100 ] ( arr [ ] , tamanho )
{
}[/size][/size]
[size=14]peão Код:
[size=13]timer X [ 100 ] ( string : arr [ ] )
{
}[/size][/size]
5)
- Código
peão Код:
- Código:
main ( )
{
new
Iterator : x < 100 > ; // Linha de alerta.
foreach ( novo i : x )
{
}
}
- Problema
Код:
- Código:
<path>\errors.pwn(6): aviso 203: o símbolo nunca é usado: "x@YSII_Cg"
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Aviso.
- Solução
Esta é uma das mensagens de advertência um pouco mais esotéricas. Os iteradores compilam para DUAS variáveis - uma matriz de dados e um tamanho. A matriz de dados é chamada de "@YSII_Ag" e a variável de tamanho é chamada de "@YSII_Cg". Se você receber um aviso de que a variável de tamanho nunca é usada, isso significa que o tamanho nunca é modificado, o que significa que nada é adicionado ou removido do iterador. Se for esse o caso, seu iterador estará sempre vazio e, portanto, sem sentido. Se você receber uma mensagem dizendo que "@YSII_Ag" (o array de dados) também nunca é usado, o iterador nunca é usado, mesmo em um loop "foreach".
peão Код:- Código:
main ( )
{
new
Iterator : x < 100 > ;
Iter_Add ( x, 10 ) ;
foreach ( novo i : x )
{
}
}
6)
- Código
peão Код:
- Código:
main ( )
{
new
Iterator : x < 100 > ;
Iter_Add ( x, 10 ) ;
foreach ( i : x ) // Linha de erro.
{
}
}
- Problema
Код:
- Código:
<caminho>\errors.pwn(7): erro 017: símbolo indefinido "i"
<path>\errors.pwn(7): aviso 206: teste redundante: expressão constante é diferente de zero
<caminho>\errors.pwn(7): erro 017: símbolo indefinido "i"
<path>\errors.pwn(7) : warning 221: nome do rótulo "_Y_ITER_C0" nome do marcador de sombras
<path>\errors.pwn(7): aviso 225: código inacessível
<caminho>\errors.pwn(7): erro 017: símbolo indefinido "i"
<caminho>\errors.pwn(7): erro fatal 107: muitas mensagens de erro em uma linha
Compilação abortada. Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
4 Erros.
- Solução
Aqui apenas o primeiro erro é importante, todos os outros são causados pelo primeiro. Eles podem ser confusos, pois expõem alguns dos internos de "y_iterate", mas apenas os ignore e corrija o primeiro erro (o mesmo de sempre).
peão Код:- Código:
main ( )
{
new
Iterator : x < 100 > ;
Iter_Add ( x, 10 ) ;
foreach ( novo i : x )
{
}
}
7)
- Problema
O compilador trava.
- Solução
Existem várias causas para isso, geralmente uma macro se expandindo para muito código. Se você tiver uma declaração "foreign", "global", "remotefunc" ou "timer" muito grande, como:
peão Код:- Código:
timer MyTimer [ 1000 ] ( playerid, string : str [ ] , arr [ ] , tamanho, string : other [ ] , string : final [ ] )
{
}
O código acima IRÁ travar o compilador. Por si só, não é uma linha longa - muito curta em relação ao máximo de 511 caracteres, mas, como afirmado anteriormente, o YSI usa muitas macros e isso se expande para uma longa linha de código (eficiente, mas longa). O problema são os estágios intermediários - o código é expandido para um código muito longo e depois reduzido para um código ligeiramente mais longo. Tente encurtar a linha.
peão Код:- Código:
timer MyTimer [ 1000 ] ( p, string : s [ ] ,a [ ] ,c, string : o [ ] , string : f [ ] )
{
}
Isso vai compilar bem. Se o compilador ainda travar (e você confirmou qual função é o problema comentando todas as outras), talvez seja necessário recorrer ao uso de métodos alternativos, como cronômetros básicos de "encaminhamento"/"público". O código gerado por "estrangeiro" e "global" é tão longo que teve que ser dividido em duas partes - daí porque as duas palavras-chave foram feitas para espelhar "encaminhar" e "público".
- Código
peão Код:
- Código:
main ( )
{
inline Func ( arr [ ] ) // Linha de erro.
{
}
}
- Problema
Код:
- Código:
<path>\errors.pwn(7): erro 009: tamanho de array inválido (negativo, zero ou fora dos limites)
<caminho>\errors.pwn(7) : erro 001: token esperado: ")", mas encontrado ";"
<caminho>\errors.pwn(7): erro 036: declaração vazia
<caminho>\errors.pwn(7): erro fatal 107: muitas mensagens de erro em uma linha
Compilação abortada. Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
4 Erros.
- Solução
Este é realmente um problema semelhante ao número 4, mas com sintomas diferentes. Infelizmente, as funções inline não podem ter arrays, mesmo quando seguidas por seu tamanho. Se você tentar incluir o tamanho, receberá um adicional:
Код:- Código:
<path>\errors.pwn(7): aviso 215: a expressão não tem efeito
Você pode, no entanto, ainda ter strings prefixadas com "string:".
- Código:
peão Код:
main ( )
{
função inline ( string : arr [ ] )
{
}
}
9)
- Código
peão Код:
- Código:
uvar
gFirst [ MAX_PLAYERS ] [ 10 ] , // Linha de erro.
gSegundo [ MAX_PLAYERS ] [ 10 ] ;
- Problema
Код:
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
As variáveis declaradas com "novo" ou "estoque", etc., geralmente seguem o novo padrão de linha acima. Por motivos técnicos, isso não pode ser feito com as variáveis "uvar" e "svar". Cada um deve estar na mesma linha que uma declaração "uvar" ou "svar".
peão Код:- Código:
uvar gFirst [ MAX_PLAYERS ] [ 10 ] ;
uvar gSecond [ MAX_PLAYERS ] [ 10 ] ;
10)
- Código
peão Код:
- Código:
public DoRead ( nome [ ] , valor [ ] )
{
INI_String ( "chave" , gValue ) ; // Linha de erro.
}
- Problema
Код:
- Código:
<path>\errors.pwn(12): erro 017: símbolo indefinido "INI_String"
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
"INI_String" EXISTE, apenas dá um erro incomum quando o último parâmetro é perdido. Você deve chamá-lo com o comprimento de destino.
peão Код:- Código:
public DoRead ( nome [ ] , valor [ ] )
{
INI_String ( "chave" , gValue, sizeof ( gValue ) ) ;
}
11)
- Código
peão Код:
- Código:
#include <YSI\y_commands>
- Problema
Код:
- Código:
<include>\YSI\y_debug.inc(367): erro 036: declaração vazia
<include>\YSI\y_debug.inc(367): erro 036: declaração vazia
<include>\YSI\y_amx.inc(367): erro 036: declaração vazia
<include>\YSI\y_amx.inc(367): erro 036: declaração vazia
<include>\YSI\y_amx.inc(411): erro 036: declaração vazia
<include>\YSI\y_amx.inc(411): erro 036: declaração vazia
<include>\YSI\y_amx.inc(646): erro 036: declaração vazia
<include>\YSI\y_amx.inc(646): erro 036: declaração vazia
<include>\YSI\y_amx.inc(780): erro 036: declaração vazia
<include>\YSI\y_amx.inc(780): erro 036: declaração vazia
<include>\YSI\y_amx.inc(938): erro 036: declaração vazia
<include>\YSI\y_amx.inc(938): erro 036: declaração vazia
<include>\YSI\y_amx.inc(958): erro 036: declaração vazia
<include>\YSI\y_amx.inc(958): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(144): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(144): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(150): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(150): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(159): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(159): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(174): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(174): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(183): erro 036: declaração vazia
<include>\YSI\internal\y_shortfunc.inc(183): erro 036: declaração vazia
<include>\YSI\internal\y_dohooks.inc(125): erro 036: declaração vazia
<include>\YSI\internal\y_dohooks.inc(125): erro 036: declaração vazia
Compilação abortada. Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
26 Erros.
- Solução
Quando você recebe centenas de erros como esse dentro do YSI, isso tende a ser causado pelo uso de um editor não padrão (ou seja, não PAWNO). Não há nada de errado com outros editores, alguns são apenas configurados com diferentes parâmetros de linha de comando padrão para PAWNCC (o compilador). Você precisa certificar-se de passar por esses dois interruptores importantes:
Код:- Código:
[size=14][size=13]-;+ -(+[/size][/size]
12)
- Código
peão Код:
- Código:
timer X [ 100 ] ( ) // Linha de erro.
{
}
- Problema
Код:
- Código:
<path>\errors.pwn(3): aviso 218: protótipos de estilo antigo usados com ponto e vírgula opcional
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Aviso.
- Solução
Isso parece ser causado pelo uso do RolePlay de Raven, que por algum motivo inexplicável decidiu ignorar a formatação SA:MP padrão e remover o ponto e vírgula. Para corrigir isso, primeiro você precisa remover esta linha:
[peão]#pragma ponto e vírgula 0
Em seguida, corrija todos os outros erros que surgem porque estão faltando muitos pontos e vírgulas. Culpe eles, não eu - isso é o que acontece quando você ignora os padrões de toda a comunidade!
13)
[peão]#pragma ponto e vírgula 0
Em seguida, corrija todos os outros erros que surgem porque estão faltando muitos pontos e vírgulas. Culpe eles, não eu - isso é o que acontece quando você ignora os padrões de toda a comunidade!
13)
- Código
peão Код:
- Código:
gancho OnGameModeInit ( ) // Linha de erro.
{
}
- Problema
Код:
- Código:
<path>\errors.pwn(3) : erro 021: símbolo já definido: "@yH_GameModeInit2"
<path>\errors.pwn(3) : erro 021: símbolo já definido: "@yH_GameModeInit2"
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Aviso.
- Solução
Isso se aplica a qualquer retorno de chamada conectado e número no final, por exemplo "@yH_PlayerDisconnect42". O problema é causado pela inclusão de y_hooks antes de outras inclusões, pois eles também podem usar y_hooks:
peão Код:- Código:
#include <YSI\y_hooks>
#include <other>
- Código:
hook OnGameModeInit ( ) // Linha de erro.
{
}
Deveria estar:
peão Код:- Código:
#include <other>
#include <YSI\y_hooks>
- Código:
gancho OnGameModeInit ( ) // Linha de erro.
{
}
14)
- Código
peão Код:
- Código:
#include "internal\y_version" // Linha de erro.
- Problema
Код:
- Código:
pawno\include\YSI/y_ini.inc(161): erro fatal 100: não é possível ler do arquivo: "internal\y_version"
Compilador Pawn 3.2.3664 Copyright 1997-2006, ITB CompuPhase
1 Erro.
- Solução
O verdadeiro problema está aqui:
Код:- Código:
\YSI/y_ini.inc
Em algum lugar do seu código, ou em uma das inclusões do seu código, um arquivo foi incluído incorretamente. TODOS os arquivos YSI DEVEM ser incluídos usando uma barra invertida, NÃO uma barra normal. Mudar:
peão Код:- Código:
#include <YSI/y_ini>
Para:
peão Код:- Código:
#include <YSI\y_ini>
Repita para todas as outras inclusões feitas incorretamente (ou seja, usando "YSI/" e não "YSI\").
Creditos:Misiur