20.09.2011, 02:15
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?
Exemplo rбpido de cada uma:
#assert
Isso verifica se algo й verdadeiro, se nгo, interrompe a compilaзгo.
Assim, compilarб normalmente.
Assim, nгo, e darб um erro fatal.
O erro serб:
#define
Sem dъvida a mais usada directive!
Ela define um sнmbolo como uma substituiзгo, dessa forma:
й a mesma coisa de tivйssemos escrito:
Ou entгo...
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:
#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.
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б:
#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.
#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.
#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:
#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:
Gamemode:
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:
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.
...• 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
#assert
Isso verifica se algo й verdadeiro, se nгo, interrompe a compilaзгo.
pawn Код:
#define DIRECTIVE 10
#assert DIRECTIVE > 5
pawn Код:
#define DIRECTIVE 1
#assert DIRECTIVE > 5
O erro serб:
pawn Код:
"Assertation failed: 1 > 5"
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.");
pawn Код:
/*#define COR_AZUL (0x157DECFF)*/
SendClientMessage(playerid, 0x157DECFF, "Olб pessoas.");
pawn Код:
#define DIRECTIVE 7
printf("%d", DIRECTIVE);
pawn Код:
printf("%d", 7);
Й 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
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
#error
Envia uma mensagem de erro fatal ao compilador.
A mensagem serб:
pawn Код:
"User error: Moo check failed"
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
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"
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". |
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");
}
pawn Код:
#tryinclude <myinc>
main()
{
#if defined _MY_INC_INC
MyIncFunc();
#endif
}
#undef
Remove uma definiзгo ou sнmbolo anteriormente definido.
Exemplo:
pawn Код:
#define MOO 10
printf("%d", MOO);
#undef MOO
printf("%d", MOO);
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.