Directives -
Shelby - 20.09.2011
Sumбrio:
...• Oque sгo
directives?
...• Como sгo as
directives?
...• Quais sгo as
directives disponнveis?
...• Exemplo rбpido de cada uma:
......•#assert
......•#define
......•#else
......•#elseif
......•#emit
......•#endif
......•#endinput
......•#error
......•#file
......•#if
......•#include
......•#line
......•#pragma
.........• #pragma
directive valor:
......•#tryinclude
...• Agradecimentos
...• Consideraзхes finais
O que sгo directives?
Directives sгo comandos que informam ao compilador para fazer uma tarefa.
Como sгo as directives?
Sendo direto,
directives sгo os cуdigos que escrevemos iniciados com '#'.
Quais sгo as directives disponнveis?
pawn Код:
1 #assert
2 #define
3 #else
4 #elseif
5 #emit
6 #endif
7 #endinput
8 #error
9 #file
10 #if
11 #include
12 #line
13 #pragma
14 #section
15 #tryinclude
16 #undef
Exemplo rбpido de cada uma:
#assert
Isso verifica se algo й verdadeiro, se nгo, interrompe a compilaзгo.
pawn Код:
#define DIRECTIVE 10
#assert DIRECTIVE > 5
Assim, compilarб normalmente.
pawn Код:
#define DIRECTIVE 1
#assert DIRECTIVE > 5
Assim, nгo, e darб um erro fatal.
O erro serб:
pawn Код:
"Assertation failed: 1 > 5"
#define
Sem dъvida a mais usada
directive!
Ela define um sнmbolo como uma substituiзгo, dessa forma:
pawn Код:
#define COR_AZUL (0x157DECFF)
SendClientMessage(playerid, COR_AZUL, "Olб pessoas.");
й a mesma coisa de tivйssemos escrito:
pawn Код:
/*#define COR_AZUL (0x157DECFF)*/
SendClientMessage(playerid, 0x157DECFF, "Olб pessoas.");
Ou entгo...
pawn Код:
#define DIRECTIVE 7
printf("%d", DIRECTIVE);
Serб entendido pelo compilador como:
#else
Й a mesma coisa que o
else, mas para
#if e nгo
if.
#elseif
Й a mesma coisa que o
else if, mas para
#if.
Exemplo:
pawn Код:
#define MOO 10
#if MOO == 9
printf("if");
#else
#if MOO == 8
printf("else if");
#else
printf("else");
#endif
#endif
#emit
Esta
directive nгo estб listada no pawn-lang.pdf. No entanto, ela existe. Й basicamente um compilador inline, se vocк entende de AMX vocк pode usar esta para colocar opcodes diretamente no seu cуdigo AMX.
Vocк raramente ou nunca irб utilizar isto, nгo й necessбrio o entendimento completo.
Caso queira se aprofundar: https://sampwiki.blast.hk/wiki/Query_Mechanism#Opcodes
#endif
Й como uma chave de fechamento para o
if.
#if nгo usa chaves, entгo й necessбrio terminar a funзгo com
#endif.
#endinput
Isso interrompe a inclusгo de um arquivo. Ele й frequentemente usado para evitar a compilaзгo de arquivos incluнdos duas vezes por acidente.
pawn Код:
#if defined _BLA_INC
#endinput
#endif
#define _BLA_INC
Primeira vez que o arquivo й chamado _BLA_INC nгo estб definida, entгo o cуdigo continua. Segunda vez que o arquivo й chamado _BLA_INC jб estб definida de modo que nгo ele nгo inclui o arquivo novamente. A explicaзгo de #include explicarб o que ela faz.
#error
Envia uma mensagem de erro fatal ao compilador.
A mensagem serб:
pawn Код:
"User error: Moo check failed"
#file
Define o nome do arquivo atual. Basicamente inъtil.
#if
Faz exatamente igual a funзгo
if.
A diferenзa й que ele nгo usa chaves, entгo, vocк deve usar espaзos.
pawn Код:
#define LIMIT 10
#if LIMIT < 10
#error Limite muito baixo
#endif
#include
A directiva include й para incluir livrarias prontas ao seu scripts, os formatos podem variar(.inc, .pwn, ...)
Vocк tambйm pode especificar includes em diferentes diretуrios.
pawn Код:
#include "diretуrio/include.pwn"
#line
Esta й outra directiva tгo inъtil quanto
#file. Ela apenas especifica o nъmero da linha atual, se vocк sentir a necessidade de mudб-la depois.
#pragma
Esta й uma das
directives mais complexas. Tem um grande nъmero de opзхes para controlar como o seu script funciona. Abaixo vocк pode ver as opзхes dessa directiva.
#pragma directive valor:
Nome | Valor | Descriзгo |
codepage | nome / valor | Define uma pбgina de cуdigo Unicode para usar nas strings. |
compress | 1 / 0 | Nгo й suportado no SA-MP. Nгo tente usa-lo! |
deprecated | sнmbolo | Gera um aviso para dizer аs pessoas que hб uma versгo melhor disponнvel sobre o sнmbolo usado. |
dynamic | valor (geralmente uma potкncia de 2) | Define o tamanho da memуria atribuнda а stack e heap. Necessбrio se vocк receber o aviso de uso em excesso de memуria apуs a compilaзгo (uma tablatura estranha apуs a linha de copyright do compilador) |
pack | 1 / 0 | Troca os significados de !"" e "". Leia pawn-lang.pdf para mais informaзхes sobre packed strings. |
tabsize | valor | Outra definiзгo amplamente mal utilizada. Isso deve ser usado para definir o tamanho de um bloco de cуdigo para evitar os avisos do compilador que a identaзгo estб errada devido a espaзos e tabulaзхes sendo usados de forma intercambiбvel. Ele й definido como 4 em no SA:MP. Caso Configure para 0 irб suprimir todos os avisos de espaзos sobre identation, mas й altamente desaconselhбvel, pois deixa o cуdigo totalmente ilegнvel. |
unused | sнmbolo | Como deprecated ele deve ser colocado apуs o sнmbolo que pretende suprimir o aviso "symbol is never used". |
#tryinclude
Esta й semelhante a
#include, mas se o arquivo nгo existir a compilaзгo nгo irб falha. Isso й ъtil para apenas incluindo recursos no seu script que caso a pessoa nгo tiver a include nгo irб atrapalhar o funcionamento do script, como por exemplo se uma pessoa tem o plugin correto instalado (ou pelo menos a include do plugin):
Testando myinc.inc:
pawn Код:
#if defined _MY_INC_INC
#endinput
#endif
#define _MY_INC_INC
stock MyIncFunc()
{
printf("Hello");
}
Gamemode:
pawn Код:
#tryinclude <myinc>
main()
{
#if defined _MY_INC_INC
MyIncFunc();
#endif
}
MyIncFunc sу irб ser chamada se myinc.inc foi encontrada e compilada. Isto, como dito antes, й bom para coisas como plugins IRC para verificar se eles realmente tкm o plug-in.
#undef
Remove uma definiзгo ou sнmbolo anteriormente definido.
Exemplo:
pawn Код:
#define MOO 10
printf("%d", MOO);
#undef MOO
printf("%d", MOO);
Isto enviarб uma mensagem de erro, pois na ъltima linha o MOO nгo existe(pois foi 'des-definida').
Agradecimentos:
Agradecimentos a
Wiki SA-MP, grande parte do tutorial foi aproveitado dela.
Consideraзхes finais:
O 'tutorial' acabou ficando muito maior do que o esperado, mas por estar dividido em partes vocк pode buscar apenas a que lhe interessa.
Para mais informaзхes nгo deixar de ler:
https://sampwiki.blast.hk/wiki/Keywords:Directives
Caso ficou algo mal-esclarecido, por favor, informe para que possa ser corrigido.
Espero que esclareзa suas dъvidas, qualquer questгo pergunte que tentarei esclarecer.
Re: Directives -
Vai_Besta - 20.09.2011
Muito bom

valew
Re: Directives -
Lуs - 20.09.2011
Inseto. Prefiro conhecer por #defines & #include
Re: Directives -
[NWD]Jim._.Carrey - 20.09.2011
Muito bom aprendi algumas coisas.
Belo tutorial
Re: Directives -
BrunoBSF - 20.09.2011
Muito Bom
Re: Directives -
Y_Baby - 20.09.2011
Parabens galina cega.
Re: Directives -
Ricop522 - 20.09.2011
Bom, parabйns!
Re: Directives -
Macintosh - 20.09.2011
Lecal Larceny
Re: Directives -
Josma_cmd - 20.09.2011
Уtimo tutorial, eu nгo conhecia o 'assert'. Muito bem explicado Larceny parabйns.
Infelizmente Pawn nгo й tгo amplo а ponto de suportar alguns dos tipos de diretivas citados.
Re: Directives -
[R] ousenber [K] - 20.09.2011
Muito bom !!!! 100/10