Bonjour,
Savez vous comment je pourrais redéfinir ces deux fonctions avec presque le même prototype ?
En pratique, je veux pouvoir écrire quelque chose comme :
myprintf(int a, ...)
{
if (a == 1)
printf(...)
else
{
/* TODO */
}
}
Merci
Bonjour,
Savez vous comment je pourrais redéfinir ces deux fonctions avec presque le même prototype ?
En pratique, je veux pouvoir écrire quelque chose comme :
myprintf(int a, ...)
{
if (a == 1)
printf(...)
else
{
/* TODO */
}
}
Merci
Quel est ton but de vouloir réaliser une telle chose?
printf écrit sur la sortie standard
fprintf écrit sur un flux spécifique
rajouter des if esle ne rendra que ton programme plus lents!
Le but est de pouvoir activer / desactiver toutes les sorties (standard et fichiers) en un seul coup je m'explique :
1) je définis :
#define ACTIVEPRINTF 1 //(ou 0)
2) j'écris un peu partout dans mon code
#if ACTIVEPRINTF
printf(...)
#endif
Je voudrais eviter cela partout dans le code, en ayant une fonction MyPrintf du type
MyPrintf(...)
{
#if ACTIVEPRINTF
printf(...)
#endif
}
Merci
Nicolas
Non tu ne peux pas, tu es obligé de mettre à chaque fois un #if![]()
Si j'ai bien compris tu peux tout simplement faire comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #define ACTIVEPRINTF 1 #if ACTIVEPRINTF #define MyPrintf(...) printf(__VA_ARGS__) #else #define MyPrintf(...) #endif
Personnellement, pour ce que tu cherches à faire ici, je te conseille de passer par des macros comme le propose ssmario2.
Maintenant, si tu as vraiment besoin de créer une fonction du style de printf(), je t'invite à regarder du côté des fonctions va_start(), va_arg() et va_end() ainsi que du côté de vprintf() et consœur.
L'idée de la macro me convient bien mais je n'arrive pas à la faire fonctionner correctement.
J'ai mis :
#define ACTIVEPRINTF 1
#if ACTIVEPRINTF
#define MyPrintf(__VA_ARGS__) printf(__VA_ARGS__)
#else
#define MyPrintf(__VA_ARGS__)
#endif
puis dans le main : MyPrintf("Test %d\n %0.20f\n",15, 3.14152);
et j'ai les warning suivants à la compilation ;
warning C4002: too many actual parameters for macro 'MyPrintf'
warning C4313: 'printf' : '%d' in format string conflicts with argument 1 of type 'const char *'
mais surtout un échec à l'exécution...
Merci de votre aide
Dans ta première macro il faut mettre des points (pour montrer que tu attends un nombre variable d'arguments). Dans la deuxième aussi d'ailleurs :p
Ta deuxième macro ne sert à rien lol
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #define ACTIVEPRINTF 1 #if ACTIVEPRINTF #define MyPrintf(...) printf(__VA_ARGS__) #else #define MyPrintf(...) my_printf(__VA_ARGS__) #endif
Ca ne fonctionne pas, je présume que le compilo C++ de Visual Studio n'en veut pas.
Je suis passé via les va_args avec vprintf et cela fonctionne très bien
Nicolas
Si tu as Visual C++ 2005 ou plus normalement ça devrais fonctionnerSupport for variadic macros was introduced in Visual C++ 2005.![]()
Partager