[Tutorial] Directives
#1

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:
pawn Код:
printf("%d", 7);
#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:
NomeValorDescriзгo
codepagenome / valorDefine uma pбgina de cуdigo Unicode para usar nas strings.
compress1 / 0Nгo й suportado no SA-MP. Nгo tente usa-lo!
deprecatedsнmboloGera um aviso para dizer аs pessoas que hб uma versгo melhor disponнvel sobre o sнmbolo usado.
dynamicvalor (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)
pack1 / 0Troca os significados de !"" e "". Leia pawn-lang.pdf para mais informaзхes sobre packed strings.
tabsizevalorOutra 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.
unusedsнmboloComo 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.
Reply
#2

Muito bom valew
Reply
#3

Inseto. Prefiro conhecer por #defines & #include
Reply
#4

Muito bom aprendi algumas coisas.

Belo tutorial
Reply
#5

Muito Bom
Reply
#6

Parabens galina cega.
Reply
#7

Bom, parabйns!
Reply
#8

Lecal Larceny
Reply
#9

У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.
Reply
#10

Muito bom !!!! 100/10
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)