Bonjour, dans mon prgm, j'aimerais faire qq macros. Lorsque je fais un malloc, mon code est le suivan :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
T * p=malloc(N*sizeof(*p));
if(p==NULL)
{
  fprintf(stderr,"%s:%d : Error : malloc() failed\n",__FILE__,__LINE__);
  exit(EXIT_FAILURE);
}
d'où ma macro suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
#define MEMERROR \
do\
{\
  fprintf(stderr,"%s:%d : Error : malloc() failed\n",__FILE__,__LINE__);\
  exit(EXIT_FAILURE);\
}\
while(0)
 
T * p=malloc(N*sizeof(*p));
if(p==NULL) MEMERROR;
Serait-il maintenant possible de faire une macro du genre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
T * p=MALLOC(p,N);
où la macro MALLOC fait qqch du genre (mais ça ne marche pas...)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#define MALLOC(ptr,size)\
do\
{\
  malloc(size*sizeof(*ptr));\
  ifptr==NULL) MEMERROR;\
}\
while(0)
Bien sûr ceci ne marche pas...


A propos de free : plutôt que de faire à chaque fois

puis-je faire

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#define FREE(ptr)\
do\
{\
  free(ptr);\
  ptr=NULL;\
}\
while(0)
Enfin, à propos du fclose(), puis-je faire, au lieu de

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
fclose(pfile); pfile=NULL;
une macro comme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#define FCLOSE(ptr)\
do\
{\
  fclose(ptr);\
  ptr=NULL;\
}\
while(0)
Pouvez-vous donc s'il vous plait me conseiller sur ces macros ? Est-il recommandé de faire autant de macros (elles sont courtes donc lisibles) ?

Merci d'avance