Bonjour,
Un petit forum sur : pourquoi tu post ?
- Ben pour te faire bouler …
Bon alors on recommence pour M. susceptible :
Bon voila une de mes fonctions supportée par pas mal de compilateur (c’est effectivement du hors normes) :
void trace( Char *Fmt, ... )
{
int *AddrArgVar = (int *)(&Fmt)+1; // AddrArgVar pointe sur le premier argument variable
char buf[4096];
/* Ici on utilise les foncionnalites des fonctions de style printf
* pour decoder les arguments variables
* (plutot que de ré-écrire un printf avec des va_list)
*
* Remarque : Seul les 20 premiers arguments seront utilisés
*/
_snprintf( buf, sizeof(buf)-1, Fmt, *(AddrArgVar),
*(AddrArgVar+1),
*(AddrArgVar+2),
*(AddrArgVar+3),
*(AddrArgVar+4),
*(AddrArgVar+5),
*(AddrArgVar+6),
*(AddrArgVar+7),
*(AddrArgVar+8),
*(AddrArgVar+9),
*(AddrArgVar+10),
*(AddrArgVar+11),
*(AddrArgVar+12),
*(AddrArgVar+13),
*(AddrArgVar+14),
*(AddrArgVar+15),
*(AddrArgVar+16),
*(AddrArgVar+17),
*(AddrArgVar+18),
*(AddrArgVar+19) );
/* Initialise la fin de chaine a 0
*(pour eviter les plantages memoires mais certainement superflux)
*/
*(buf+sizeof(buf)-1) = 0x00;
/* Affichage du resultat a l'ecran avec un petit texte
* devant qui pourrait etre l'heure par exemple
*/
printf( "%-15.15s %s\r\n", "exemple de trace", buf );
/* Ou encore dans une fenetre a la windows ou ...
*/
MessageBox( NULL, buf, "trace", MB_OK );
}
// Ca s'utilise comme ca :
// trace( "Valeur de X:%d et de S:%s", X, S );
qui dit mieux ?
Pour info: les balises [ CODE ] ne permettent pas d’inserer des espases (respecter les identations).
J’ai été obligé de mettre plusieur fois & nbsp; a la place ce qui n’est pas pratique.
Pareil pour le signe + ou je suis obligé de mettre & #043;
Edité le 30/10/2007 à 01:20