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);
}