Par ailleurs, de nombreuses implémentations C a v?printf variations qui, à mon humble avis doit avoir été une partie de la norme. Les détails exacts varient, mais une implémentation typique acceptera une structure contenant un personnage-sortie de la fonction de pointeur et de l'information en disant que ce qui est censé se produire. Cela permet de printf, sprintf, et fprintf à tous utiliser le même "de base" mécanisme. Par exemple, vsprintf pourrait être quelque chose comme:
void s_out(PRINTF_INFO *p_inf, char ch)
{
(*(p_inf->destptr)++) = ch;
p_inf->result++;
}
int vsprintf(char *dest, const char *fmt, va_list args)
{
PRINTF_INFO p_inf;
p_inf.destptr = dest;
p_inf.resultat = 0;
p_inf.func = s_out;
core_printf(&p_inf,esf,args);
}
Le core_printf fonction des appels p_inf->func pour chaque caractère à la sortie; la fonction de sortie peut alors envoyer les caractères de la console, un fichier, une chaîne, ou quelque chose d'autre. Si la mise en œuvre expose le core_printf fonction (et quelle que soit la configuration du mécanisme, on utilise), on peut l'étendre à toutes sortes de variations.