elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  If en macros ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: If en macros ?  (Leído 2,462 veces)
ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
If en macros ?
« en: 20 Agosto 2013, 12:18 pm »

Es posible incluir un IF en un macro?

Por ejemplo, quiero hacer un macro que devuelva TRUE si el argumento introducido es un digito decimal, y no se me ocurre otra forma que no sea anadiendo un if en el macro.



por otro lado, es posible que un macro devuelva un char o un string en lugar de de int o float?

gracias y saludos


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: If en macros ?
« Respuesta #1 en: 20 Agosto 2013, 12:27 pm »

Una macro no devuelve nada.

¿Usas C++? Si es así, quizas te interese usar mejor funciones inline con sobrecarga de argumentos:

Código
  1. inline void Ejemplo(float argumento)
  2. {
  3.  // blablabla...
  4. }
  5.  
  6. inline void Ejemplo(int argumento)
  7. {
  8.  // blablabla...
  9. }


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: If en macros ?
« Respuesta #2 en: 20 Agosto 2013, 14:30 pm »

no te entiendo,
mira, esto es exactamente lo que necesito:

Exercise 10-2: Write a macro is_digit that returns TRUE if its argument is a decimal digit.


yo entiendo que una macro te devuelve un output, pero dicho output no puede ser una string? o que forma existe de que me devuelva un TRUE ?

gracias!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: If en macros ?
« Respuesta #3 en: 20 Agosto 2013, 14:32 pm »

TRUE es igual a 1. es un valor Booleano (1 o 0), verdadero o falso, no una string.
En línea

ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: If en macros ?
« Respuesta #4 en: 20 Agosto 2013, 14:59 pm »

gracias,

entonces seria algo asi?

is_digit(x) (if(x == 0 || x == 1 ||..... x== 9)
 {
// aqui se supone que tengo decir que si esto se cumple se devuelva 0 si no 1, pero  :huh:
}

En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: If en macros ?
« Respuesta #5 en: 20 Agosto 2013, 16:09 pm »

La macros no son funciones, son sustituciones de texto y estas ocurren antes de que el texto sea compilado. Para explicarlo mejor cualquiera que haya utilizado un editor de texto (el que sea) sabe como funciona la opción para remplazar. Por ejemplo uno puede sustituir todas las instancias de la palabra "negro" por "blanco":

Texto original:
Código
  1. int muy_negro;
  2. int negro;
  3.  
  4. /* ... */
  5.  
  6. negro++;
  7.  
  8. /* ... */
  9.  
  10. if (negro + negro == muy_negro)
  11.   puts("negro, negro entonces muy negro");
  12.  
  13. /* ... */

Remplazamiento de "negro" por "blanco" resulta en:
Código
  1. int muy_negro;
  2. int blanco;
  3.  
  4. /* ... */
  5.  
  6. blanco++;
  7.  
  8. /* ... */
  9.  
  10. if (blanco + blanco == muy_negro)
  11.   puts("negro, negro entonces muy negro");
  12.  
  13. /* ... */
Este ejemplo sigue la convención de C: las sustituciones no se realizan si la palabra completa no coincide y el texto de las cadenas literales se ignora.

En el caso de las macros con argumentos se realiza la sustitución y donde se indique un argumento formal (definición de la macro) este se sustituye por el argumento actual (uso de la macro):
Código
  1. /* a y b son los argumentos formales */
  2. #define SUMA(a, b) ((a) + (b))
  3.  
  4. /* ... */
  5.  
  6. int x = 1;
  7. int y = 2;
  8. int z;
  9.  
  10. /* ... */
  11.  
  12. /* x y y son los argumentos actuales */
  13. z = SUMA(x, y);

Resulta en:
Código
  1. int x = 1;
  2. int y = 2;
  3. int z;
  4.  
  5. /* ... */
  6.  
  7. z = ((x) + (y));

Para darte una idea de lo que te piden si el objetivo fuera crear un macro que verifique si un carácter es alfabético en minúsculas podríamos utilizar:
Código
  1. #define es_minuscula(ch)  ((ch) >= 'a' && (ch) <= 'z')
  2.  
  3. /* ... */
  4.  
  5. char letra = 'j';
  6.  
  7. if (es_minuscula(letra))
  8.   puts("Es minuscula");
  9. else
  10.   puts("No es minuscula");

Ya que antes de que sea compilado ese texto resulta (debido a la macro) en:
Código
  1. /* ... */
  2.  
  3. char letra = 'j';
  4.  
  5. if (((letra) >= 'a' && (letra) <= 'z'))
  6.   puts("Es minuscula");
  7. else
  8.   puts("No es minuscula");

La macro que debes desarrollar es similar.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: If en macros ?
« Respuesta #6 en: 20 Agosto 2013, 23:16 pm »

No se si quieres algo asi...

Código
  1. #include <stdio.h>
  2.  
  3. #define ISDIGIT(character) character>='0' && character<='9'
  4.  
  5. int main()
  6. {
  7. char numero='a';
  8. if(ISDIGIT(numero))
  9. puts("Es un numero\n");
  10. return 0;
  11. }
  12.  

Perfectamente puedes poner un if en un macro, pero por limpieza lo he preferido hacer así.

En realidad cuando yo pongo ISDIGIT el compilador lo reemplaza por character>='0' && character<='9' (character sería un "parámetro") es solo cuestion de dejar el código más limpio.


EDITO:

No había visto el comentario de rir3760, es una muy buena explicación de lo que es una macro.

Sa1uDoS
« Última modificación: 20 Agosto 2013, 23:19 pm por mr.blood » En línea

ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: If en macros ?
« Respuesta #7 en: 21 Agosto 2013, 09:39 am »

perfecto!! muchas gracias a los dos :D

Desconocia que se pudieran ordenar asi " character>='0' && character<='9' " ... me queda mucho  por aprender aun
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
macros ?????????
Programación Visual Basic
xato 1 1,213 Último mensaje 27 Diciembre 2006, 21:35 pm
por CeLaYa
Macros en C
Programación C/C++
m@o_614 5 2,625 Último mensaje 19 Febrero 2014, 08:22 am
por eferion
macros en C
Programación C/C++
fafafa01 4 2,833 Último mensaje 25 Enero 2017, 18:43 pm
por MAFUS
macros « 1 2 »
Dudas Generales
debbiecarreno 13 6,624 Último mensaje 27 Mayo 2017, 09:50 am
por Lautaro Villarreal Culic'
Macros VBA
Foro Libre
busqueda 0 1,155 Último mensaje 24 Octubre 2017, 20:41 pm
por busqueda
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines