[Ajuda] Fazer macro retornar?
#1

Nгo sei se й possнvel... mas vou citar um exemplo:

pawn Код:
#define pr(%1)  (for(new i;i<sizeof(i);i++){if(strfind(%1[i], input, false)){true})
Essa funзгo iria checar todas as strings da array a busca de um texto e iria retornar verdadeiro caso a array tivesse tal string.

Aonde estб o true no meu code, seria aonde ele supostamente iria retornar o valor na macro.

A macro seria usada assim:
pawn Код:
public:do:kokoroReply(playerid, input[])
{
    new buff_conj = pr(conj);
    // ...
    return 1;
}
Caso isso nгo seja possнvel, estarei usando SetProperty para fazer isso ;/
Reply
#2

Macro й uma definiзгo.

Ou seja, no cуdigo estaria:
pawn Код:
#define MELANCIA "MELAO"
printf("Gosto de"  MELANCIA);
NO AMX:

pawn Код:
printf("Gosto de"  "MELAO");

Portanto, como falei em meu tutorial, macros sгo "apelidos",
Todos me chamam de Garfield, mбs meu nome й Suyann.

Esses apelidos sгo internos e nгo compilados, apenas substituidos pelos significados.
Reply
#3

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Macro й uma definiзгo.

Ou seja, no cуdigo estaria:
pawn Код:
#define MELANCIA "MELAO"
printf("Gosto de"  MELANCIA);
NO AMX:

pawn Код:
printf("Gosto de"  "MELAO");
Portanto, como falei em meu tutorial, macros sгo "apelidos",
Todos me chamam de Garfield, mбs meu nome й Suyann.

Esses apelidos sгo internos e nгo compilados, apenas substituidos pelos significados.
Uhuahauh gostei de sua explicaзгo com frutas ^-^
Explicaзгo saudavel!
Reply
#4

Exato, ja que nosso amiguinho davi reviveu o tуpico, vou aproveitar para fazer uma pergunta.

Eu preciso de um code que faзa essa varredura das arrays.. irei aplicar o mбximo de palavras para o mбximo de semanticas possнveis entгo tem que ser algo prбtico ;/

eu tinha pensado em usar algo como:

#define pr(%1) new buff_%1;if(/*bla bla bla*/) buff_%1 = 1

Sу que isso nгo й possнvel tambйm.

Acho que o jeito vai ser fazer em SetProperty.
Reply
#5

Quote:
Originally Posted by Kuddy
Посмотреть сообщение
#define pr(%1) new buff_%1;if(/*bla bla bla*/) buff_%1 = 1

Sу que isso nгo й possнvel tambйm.
tentou pelo menos?

@edit

sу da para fazer um retorno no caso se a variavel ja for existente. neste seu caso nгo darб certo ¬¬
Reply
#6

Quote:
Originally Posted by Sky_.
Посмотреть сообщение
tentou pelo menos?

@edit

sу da para fazer um retorno no caso se a variavel ja for existente. neste seu caso nгo darб certo ¬¬
Код:
C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : error 029: invalid expression, assumed zero
C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : warning 215: expression has no effect

C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : error 017: undefined symbol "buff_conjuncao"
C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : warning 215: expression has no effect
C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : error 001: expected token: ";", but found "}"
C:\Users\Kuddy\Desktop\BLS\pawno\include\KOKOE/KOKORO.pwn(17) : fatal error 107: too many error messages on one line

Compilation aborted.
Compilation aborted.Pawn compiler 3.2.3664                          Copyright © 1997-2006, ITB CompuPhase


4 Errors.
pawn Код:
#define pr(%1)  (new buff_%1;for(new i;i<sizeof(i);i++){if(strfind(%1[i], input, false)){buff_%1 = 1})

public:do:kokoroReply(playerid, input[])
{
    //new buff_conjuncao, buff_admin, buff_helper, buff_negacao, buff_saudar;

    //if(strfind(conjuncao[i], input, false)) buff_conjuncao = true;

    pr(conjuncao); // Linha 17
    pr(admin);
    pr(helper);
    pr(negacao);
    pr(saudar);

    return 1;
}
As palavras estгo organizadas assim:

pawn Код:
new conjuncao[][] =
{
    {"mбs"}, {"porйm"}, {"todavia"}
};
Reply
#7

pawn Код:
#define pr(%1)  for(new i;i<sizeof(%1);i++)if(strfind(%1[i], input))

new bool: buff_conj;
pr(conj) buff_conj = true;
Reply
#8

nгo sei se isso pode lhe ajudar mas, ja tentou dar uma observada no macro do dcmd? :P

pawn Код:
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Reply
#9

Quote:
Originally Posted by paulor
Посмотреть сообщение
pawn Код:
#define pr(%1)  for(new i;i<sizeof(%1);i++)if(strfind(%1[i], input))

new bool: buff_conj;
pr(conj) buff_conj = true;
Exato!

Isso vai me quebrar o Senhor Galho, obrigado Paulo! Esse code com algumas customizaзхes vai caber perfeitamente а minha necessidade.

+rep a todos que me ajudaram =)
Reply
#10

Nгo querendo reviver o tуpico, mas pode ser feito dessa maneira:
pawn Код:
#define pr(%1) for(new i, l = strlen(#%1); i < l; i++) if(strfind(#%1[i], input)) buff_%1 = true
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)