printf () – wrapper-Argumente überprüft werden, die von gcc

Wenn die C printf() und seine Familie ist zusammengestellt von gcc und -Wall verwendet wird, auf der Kommandozeile, der compiler warnt davor, verlegt Argumente nach dem format-string, der verwendet wird. Als Beispiel der folgende code würde eine Fehlermeldung, dass die angegebenen format 3 Argumente aber eigentlich haben Sie nur an zwei.

printf("%d%d%d", 1, 2);

Beim schreiben einen wrapper um die printf(), wie halten Sie diese Fähigkeit? Eine form von Funktion oder ein makro wäre, was ich denken kann. Aber einfache Parser könnte ebenfalls akzeptabel sein.

Einige Möglichkeiten zum schreiben einer printf-wrapper kann werden gefunden auf stackoverflow. Zwei Allgemeine Ansätze sind mit Funktionen vprintf mit varargs, und Verwendung von __builtin_anwenden. Ich habe versucht, diese beiden Ansätze, keiner arbeitete.

InformationsquelleAutor minghua | 2016-05-12



One Reply
  1. 5

    Können Sie gcc format Funktion-Attribut, um zu überprüfen, die Parameter vor, wird der format-string.

    extern int my_printf (void *my_object, const char *my_format, ...)
               __attribute__ ((format (printf, 2, 3)));

    Überprüfen Sie die gcc-Handbuch „6.31.1 Gemeinsame Funktion Attribute“

    • ein Hinweis: wenn my_printf ist eine Klasse Mitglied: 1 hinzufügen, um das argument zu nummerieren. es würde __attribute__ ((format (printf, 3, 4)));

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.