#define _:%0,) _:%0) їComo funciona?
#1

Yo sй que el macro elimina una coma, pero no sй realmente como funciona (cual es la semбntica del cуdigo)

pawn Код:
#define _:%0,) _:%0)

#define MY_FUNC<%0>(%1) my_func_%0(_:param, %1)

MY_FUNC<first>(playerid)
{
    printf("%d %d", param, playerid);
}

MY_FUNC<second>()
{
    printf("%d", param);
}
Es del tutorial de proprocesador (por ******), pero esa parte no la entiendo mucho. Por eso les pregunto a ustedes.
Reply
#2

Otra de Y_useLess
Reply
#3

Ese cуdigo se aplica, o no, en funciуn de los parбmetros especificados en la funciуn.

La base es la siguiente:
PHP код:
#define _:%0,) _:%0)
#define MY_FUNC<%0>(%1) my_func_%0(_:param, %1) 
A partir de ahн, pueden ocurrir varias cosas en funciуn de los parбmetros que ponemos en MY_FUNC. Por ejemplo:
PHP код:
MY_FUNC<mensaje>(colorplayerid)
{
    
SendClientMessage(playerid, -1"Ejemplo bбsico.");
    return 
1;
}
/* El macro convierte lo anterior en lo siguiente: */
my_func_mensaje(_:paramcolorplayerid)
{
    
SendClientMessage(playeridcolor"Ejemplo bбsico.");
    return 
1;

Lo anterior en un principio estб bien, no deberнa generar ningъn error. Imagнnate que creamos otra funciуn sin especificar ningъn parбmetro:
PHP код:
MY_FUNC<mensaje>()
{
    
SendClientMessageToAll(-1"Ejemplo bбsico.");
    return 
1;
}
/* El macro convierte lo anterior en lo siguiente: */
my_func_mensaje(_:param, )
{
    
SendClientMessageToAll(-1"Ejemplo bбsico.");
    return 
1;
}
/*
Al no especificar parбmetros obtenemos lo siguiente: "(_:param, )".
Curiosamente eso cumple el formato del primer macro: "_:%0,)" - donde "%0" es "param".
Gracias al primer macro la coma se elimina y obtenemos: "_:param)". Obteniendo asн una funciуn vбlida:
*/
my_func_mensaje(_:param)
{
    
SendClientMessageToAll(-1"Ejemplo bбsico.");
    return 
1;

Bбsicamente nos sirve para evitar obtener un error a la hora de compilar en caso de no especificar parбmetros.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)