Bonjour,

Mon but est d'ecrire des macros de debug me permettant de simplifier les appels aux fonctions de trace.

A force de chercher, j'ai ecrit le code ci-dessous, mais qui ne me convient pas completement : il fonctionne tres bien si j'ai deux parametres d'appel (ou plus), mais pas si j'en ai un seul :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#ifndef FILE_ERROR_H
#define FILE_ERROR_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#define   TRACE_LEVEL 2
 
#define WHERESTR  "[file %s, line %d, TrcLvl %d]: "
#define WHEREARG  __FILE__, __LINE__
#define DEBUGINTERNAL(...)       fprintf(stderr, __VA_ARGS__)
#define DEBUGSTR1(fmt, ...)  do { if (TRACE_LEVEL >= 1) { DEBUGINTERNAL(WHERESTR fmt, WHEREARG, 1, __VA_ARGS__); }} while (0)
 
 
#ifdef _cplusplus
}
#endif
 
#endif
Exemples d'appel (l'appel commenté est celui qui ne fonctionne pas, et que je voudrais faire fonctionner) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <stdio.h>
 
#include "file_error.h"
 
 
int main (void)
{
 
  int i = 42;
 
  DEBUGSTR1 ("test %d %d\n", i, i);
  DEBUGSTR1 ("test %d\n", i);
/*   DEBUGSTR1 ("test\n"); */
 
 
  return 0;
}
En esperant avoir ete clair dans mes explications, et que vous pourrez m'apporter une reponse