Je veux utiliser Printf pour un débogage de base (oui, je connais avec GDB, etc.). En tant que tampons d'impression, un appel à fflush (stdout) est requis immédiatement après un imprimeur. J'ai pensé à écrire un wrapper simple. Donc, l'enveloppe sera quelque chose comme ceci: Je pense que la mise en œuvre d'une telle fonction serait quelque chose comme ceci: p> Je sais qu'il y a des fonctions / macros comme Va_List, VA_START et VA_ARGS, mais ceux-ci vous obligeront à analyser la chaîne de format Printf pour obtenir le type et je veux éviter de le faire. Y a-t-il une approche simple? Comme cela n'est que pour le débogage des objectifs, cela ne me dérange pas que le type de format soit limité à% D,% f et% s. P> p>
3 Réponses :
Il suffit d'utiliser SETVBUF CODE> et définissez le flux à la ligne tamponnée tamponnée.
void flushedPrintf(const char *fmt, ...) {
va_list va;
va_start(va, fmt);
vprintf(fmt, va);
va_end(va);
fflush(stdout);
// TODO: propagate return value from vprintf and fflush
}
printf retourne int. wrapper devrait faire la même chose
@P__J____ c'est mon erreur. J'avais demandé si dans la question.
utiliser stardr et fprintf. Starr est ignorée par défaut. P>
Cette question est répondue dans un meilleur détail ici: P>
comme une extension (et peut-être une certaine correction) à la réponse @kamilcuk.
Si vous utilisez le compilateur de la famille GCC, vous pouvez utiliser l'attribut de fonction spécial indiquant le compilateur que la fonction est de type imprimable. Le compilateur analysera la chaîne de format et émettra les avertissements - identique à l'utilisation de printf. P>