Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neo_from_cs_matrix en 23 Septiembre 2011, 15:08 pm



Título: duda con macro con if else if else
Publicado por: neo_from_cs_matrix en 23 Septiembre 2011, 15:08 pm
quiero hacer una macro asi, pero no se como hacerla realmente  :-[

#define FOPEN(a,b)
 
            if(a==1) b=fopen("asd1.dat","ab"); /
            else if(a==2) b=fopen(""asd2.dat,"ab");


el problema es que no se bien las reglas para crear macros asi complejas

necesitaria ayuda  :laugh:



Título: Re: duda con macro con if else if else
Publicado por: тαптяα en 23 Septiembre 2011, 16:11 pm
quiero hacer una macro asi, pero no se como hacerla realmente  :-[

#define FOPEN(a,b)
 
            if(a==1) b=fopen("asd1.dat","ab"); /
            else if(a==2) b=fopen(""asd2.dat,"ab");


el problema es que no se bien las reglas para crear macros asi complejas

necesitaria ayuda  :laugh:



Código
  1. #define FOPEN(a,b)
  2.  
  3.            if(a==1){
  4. b=fopen("asd1.dat","ab");
  5. }
  6.            else if(a==2){
  7. b=fopen(""asd2.dat,"ab"); }
  8.  


Título: Re: duda con macro con if else if else
Publicado por: rir3760 en 23 Septiembre 2011, 17:47 pm
Para algo relativamente complejo es mejor desarrollar una función. Ello porque en la macro seria muy difícil (tal vez mediante la macro "assert") validar los argumentos.

En todo caso si solo quieres agregar un sufijo a la cadena puedes utilizar algo mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define FOPEN(var, sufix) ((var) = fopen("asd" TO_STR(sufix) ".dat", "ab"))
  5. #define TO_STR(str)  #str
  6.  
  7. int main(void)
  8. {
  9.   FILE *a;
  10.   FILE *b;
  11.  
  12.   FOPEN(a, 1);
  13.   FOPEN(b, 2);
  14.  
  15.   fclose(a);
  16.   fclose(b);
  17.  
  18.   return EXIT_SUCCESS;
  19. }
Como puedes observar el problema es que se deben utilizar literales como 1 o 2, no puedes utilizar una variable. De nuevo en un caso como ese lo mejor es una funcion.

Un saludo