duda con macro con if else if else

Iniciado por neo_from_cs_matrix, 23 Septiembre 2011, 15:08 PM

0 Miembros y 2 Visitantes están viendo este tema.

neo_from_cs_matrix

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:


тαптяα

Cita de: 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:



#define FOPEN(a,b)

            if(a==1){
b=fopen("asd1.dat","ab");
}
            else if(a==2){
b=fopen(""asd2.dat,"ab"); }

rir3760

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í:
#include <stdio.h>
#include <stdlib.h>

#define FOPEN(var, sufix) ((var) = fopen("asd" TO_STR(sufix) ".dat", "ab"))
#define TO_STR(str)  #str

int main(void)
{
   FILE *a;
   FILE *b;
   
   FOPEN(a, 1);
   FOPEN(b, 2);
   
   fclose(a);
   fclose(b);
   
   return EXIT_SUCCESS;
}

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
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