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