SA-MP Forums Archive
Macros, parбmetros - Duda - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Macros, parбmetros - Duda (/showthread.php?tid=595427)



Macros, parбmetros - Duda - GranaT3 - 03.12.2015

estoy aprendiendo sobre esto de Pre-Processor, pero me he encontrado con algo que no comprendo.

Quote:
Originally Posted by ******
Some people like to put spaces after the comma in function parameter lists, like so:

Код:
#define MULTIPLY_TWO_NUMBERS(%0, %1)     %0 * %1
You CANNOT do this in macros - as mentioned before the FIRST space is the end of the search string, so this will look for "MULTIPLY_TWO_NUMBERS(%0,", not "MULTIPLY_TWO_NUMBERS(%0, %1)", and replace it with "%1) %0 * %1".

https://sampforum.blast.hk/showthread.php?tid=570933

їMe podrнan explicar lo que quiere decir sobre los ","?.


Respuesta: Macros, parбmetros - Duda - TheMasterNico - 03.12.2015

Lo que dices es que si quieres un macro tipo "HOLA MUNDO" para que se reemplace por algo, no puedes dejar un espacio, pues el nombre del macro solo seria "HOLA" y por lo que se reemplaza seria "MUNDO".

En si lo que dice es que el nombre de un macro que crees termina apenas encuentre el primer espacio

pawn Код:
#define NOMBRE MACRO // Nombre del macro: NOMBRE... Reemplaza: MACRO
#define NOMBRE DEL MACRO // Nombre: NOMBRE... Reemplaza: DEL MACRO
#define NOMBRE_DEL MACRO // Nombre: NOMBRE_DEL... Reemplaza MACRO
----------
En el caso del ejemplo el nombre seria MULTIPLY_TWO_NUMBERS(%0, y reemplazarнa por %1) %0 * %1


Respuesta: Macros, parбmetros - Duda - GranaT3 - 03.12.2015

Ah vale gracias. Pero en si los parбmetros de un macro se separan con "," їNo?, tambiйn menciona algo sobre los parйntesis.

Gracias, lince.


Respuesta: Macros, parбmetros - Duda - TheMasterNico - 03.12.2015

Si, los parametros se separan con una coma (,) pero en un macro no se deja un espacio luego de la coma.


Respuesta: Macros, parбmetros - Duda - GranaT3 - 03.12.2015

Vale, y ya esta ъltima duda a que se refiere con esto..

Quote:
Originally Posted by ******
Brackets

If the parameters are so flexible, how can you actually control what gets output? All the macros so far have been very bad - they didn't use brackets. Compare the following two macros:

Код:
// Without brackets (first).
#define MULTIPLY_TWO_A(%0,%1)           %0 * %1

// With brackets (second).
#define MULTIPLY_TWO_B(%0,%1)           ((%0) * (%1))

main()
{
    // Two with first.
    printf("%d", MULTIPLY_TWO_A(6, 7));
    
    // Two with second.
    printf("%d", MULTIPLY_TWO_B(6, 7));
    
    // Three with first.
    printf("%d", MULTIPLY_TWO_A(6, 7, 8));
    
    // Three with second.
    printf("%d", MULTIPLY_TWO_B(6, 7, 8));
}



Respuesta: Macros, parбmetros - Duda - DesingMyCry - 03.12.2015

Los "macros" son simplemente formas de hacer entender al procesador que debe reemplazar coincidencias.

Osea:

pawn Код:
#define multiplicar(%0,%1) %0*%1
#define multiplicar2(%0,%1) (%0)*(%1)
#define multiplicar3(%0,%1) ((%0)*(%1))

printf("resultado1: %d", multiplicar(5, 5)); // Se reemplazarнa por "5*5" que es 25
printf("resultado2: %d", multiplicar2(5, 5)); // Se reemplazarнa por "(5)*(5)" que es 25
printf("resultado3: %d", multiplicar(5, 2, 5)); // Se reemplazarнa por "5*2*5" que es 50
printf("resultado4: %d", multiplicar2(5, 2, 5)); // Se reemplazarнa por "(5*2)*(5)" que es 50
printf("resultado5: %d", multiplicar3(5, 2)*4); // Se reemplazarнa por "((5)*(2))*2" que es 40
printf("resultado5: %d", multiplicar(5, 2)*2); // Se reemplazarнa por "5*2*2" que es 20
Todos esos resultados son "iguales" en cuanto a formula (osea, solo se ocupa multiplicaciуn), por eso no hay problemas. Pero si comienzas a aplicar sumas, restas, divisiones, entre otras, tendrбs problemas.
Si no entiendes a que me refiero te escrito los ejemplos mas explнcitos.



Respuesta: Macros, parбmetros - Duda - GranaT3 - 03.12.2015

En parte entiendo, lo que no pillo es la cuestiуn de los parйntesis.


Respuesta: Macros, parбmetros - Duda - DesingMyCry - 04.12.2015

pawn Код:
#define macro(%0,%1,%2) %0 * %1 - %2
#define macro2(%0,%1,%2) (((%0) * %1) - %2)

public OnGameModeInit()
{
    printf("Resultado: %d", macro(2, 7, 12, 46)*9);
    printf("Resultado: %d", macro2(2, 7, 12, 46)*9);
}