• Domingo 15 de Diciembre de 2024, 21:39

Autor Tema:  Duda Sobre Uso De If En Macros #define  (Leído 2637 veces)

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Duda Sobre Uso De If En Macros #define
« en: Domingo 13 de Mayo de 2007, 17:12 »
0
Llevo un par de dias desde que empeze con C y por ahora he visto muy poco , una de las cosas que mas me han llamado la atencion ha sido la clausula #define y la posibilidad de hacer macros con ella , bien la duda es la siguiente:

la macro es muy simple , de esta manera si funciona :

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. #define suma(a,b) (a>b)? a+b : a
  5.                
  6. int main(void){
  7.     int x1=10&#59;
  8.     int x2=5&#59;
  9.     printf("La suma de %d + %d es igual a %d" ,x1,x2,suma(x1,x2));
  10.    
  11.     }
  12.  
  13.  

pero al poner el if de esta otra forma no me sale bien , me da error al compilar :

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. #define suma(a,b)      \
  5. if(a>b) {              \
  6.  a+b;                  \
  7. else                   \
  8.   a&#59;                  \
  9. }                        
  10.      
  11.                
  12. int main(void){
  13.     int x1=10&#59;
  14.     int x2=5&#59;
  15.     printf("La suma de %d + %d es igual a %d" ,x1,x2,suma(x1,x2));
  16.    
  17.     }
  18.  
  19.  

que es lo que estoy haciendo mal en la segunda forma ?   ,despues de cada simbolo de \ le doy a intro para que sepa el compilador que sigue en la siguiente linea.

Por cierto felicidades por la pagina , llegue buscando a traves de google y esta muy bien , hay mucha informacion . Saludos.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #1 en: Lunes 14 de Mayo de 2007, 03:47 »
0
el problema es que tu else está "colgado":

#define suma(a,B)      \
if(a>b) {              \
a+b;                  \
else                   \ //<--- no está definido su contenido...
 a;                  \
}

así funciona bien:

#define suma(a,B)      \
if(a>b) {              \
a+b;                  \
}else{                   \
 a;                  \
}

Aunque también podrías hacerlo sin los {}...

S2

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #2 en: Lunes 14 de Mayo de 2007, 08:36 »
0
Muchas gracias Karman por la respuesta  :) , lo he puesto como dices y me sigue dando error el compilador , uso Dev-C++ y me dice error en la linea 15 (syntax error before 'if)

se que es una chorrada pero ya tengo curiosidad por saber como se pondria bien .

pongo el codigo tal y como lo tengo por si teneis tiempo de echarle un ojo.

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4. #define suma(a,b)  &#092;
  5. if(a&#62;b){ &#092;
  6. a+b&#59; &#092;
  7. }else{ &#092;
  8. a&#59; &#092;
  9. }
  10.                
  11. int main(void){
  12.     int x1=10&#59;
  13.     int x2=5&#59;
  14.     printf(&#34;La suma de %d + %d es igual a %d&#34; ,x1,x2,suma(x1,x2));
  15.    
  16.     }
  17.  
  18.  
  19.  

Un saludo.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #3 en: Lunes 14 de Mayo de 2007, 15:40 »
0
Los caracteres
Citar
\
No van...  :)
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #4 en: Lunes 14 de Mayo de 2007, 15:45 »
0
Cita de: "Angel_K_ido"
Los caracteres
Citar
\
No van...  :)


Lo siento no entendi tu respuesta , tened un poco de paciencia conmigo que no llevo mucho con C  B)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #5 en: Lunes 14 de Mayo de 2007, 16:01 »
0
El problema es que una macro no es mas que un reemplazo de texto. Si pusieras suma(x1,x2); en una linea solito funcionaria.

Pone el codigo de la macro como argumento a la funcion y veras que tampoco compila, mientras que si copias el codigo del primer macro si lo hace ya que usa el operador ternario.

La \ es lo que se debe usar cuando tenemos macros con mas de una linea y aca tenes mas informacion sobre macros en general:

http://www.ebyte.it/library/codesnippets/W...gCppMacros.html

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #6 en: Lunes 14 de Mayo de 2007, 16:25 »
0
Gracias, muy amable. Todos los dias se aprende algo nuevo.-
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #7 en: Lunes 14 de Mayo de 2007, 16:42 »
0
Cita de: "Eternal Idol"
El problema es que una macro no es mas que un reemplazo de texto. Si pusieras suma(x1,x2); en una linea solito funcionaria.

Pone el codigo de la macro como argumento a la funcion y veras que tampoco compila, mientras que si copias el codigo del primer macro si lo hace ya que usa el operador ternario.

La \ es lo que se debe usar cuando tenemos macros con mas de una linea y aca tenes mas informacion sobre macros en general:

http://www.ebyte.it/library/codesnippets/W...gCppMacros.html
Estupendo , me has ayudado mucho a entenderlo , gracias por la pagina , es que no tenia muy claro eso de que la macro en realidad lo que hace es "sustituir" cuando la usemos el valor que le dimos en el #define , y yo la estaba utilizando mal

entonces tendria que haberlo hecho asi y si funciona ya , el ejemplo que pongo es muy simple pero era para ver como utilizar un if en una macro : ah y gracias por la pagina esta muy bien . Un saludo

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3.  
  4.  
  5. #define CambiaOrden(a,b)  if(a&#62;b) a=b
  6. #define Suma(a,b) a+b
  7.                
  8. int main(void){
  9.     int x1=10&#59;
  10.     int x2=5&#59;
  11.     CambiaOrden(x1,x2);
  12.     printf(&#34;La suma de %d + %d es igual a %d&#34; ,x1,x2,Suma(x1,x2));
  13.    
  14.     }
  15.  
  16.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #8 en: Lunes 14 de Mayo de 2007, 16:43 »
0
De nadas  B) Y ahora paso a decir que las macros es mejor obviarlas  :P

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #9 en: Lunes 14 de Mayo de 2007, 16:54 »
0
Cita de: "Eternal Idol"
De nadas  B) Y ahora paso a decir que las macros es mejor obviarlas  :P
jejejejee ,  :D  :D  ,
tenia interes en saber como usarlas ,
yo pienso que la clausula define el uso que habria que darle es unicamente para definir constantes ,

para lo demas funciones y metodos para no complicar mucho el asunto.

Un saludo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #10 en: Lunes 14 de Mayo de 2007, 17:55 »
0
Cita de: "Game_Over"
tenia interes en saber como usarlas , yo pienso que la clausula define el uso que habria que darle es unicamente para definir constantes , para lo demas funciones y metodos para no complicar mucho el asunto
Esta bien aunque en C++ se puede usar el keyword const y si son valores que guardan una relacion un enum es lo ideal  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Game_Over

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Sobre Uso De If En Macros #define
« Respuesta #11 en: Lunes 14 de Mayo de 2007, 18:18 »
0
Cita de: "Eternal Idol"
Cita de: "Game_Over"
tenia interes en saber como usarlas , yo pienso que la clausula define el uso que habria que darle es unicamente para definir constantes , para lo demas funciones y metodos para no complicar mucho el asunto
Esta bien aunque en C++ se puede usar el keyword const y si son valores que guardan una relacion un enum es lo ideal  B)
Gracias por el apunte  :)  , C++ lo vere en un futuro pero me ha parecido interesante empezar por C antes . A ver si le meto fuerte  :smartass: