G_GNUC_PRINTF()
ist eine glib Bibliothek Präprozessormakro. Für den gcc Compiler wird definiert als (von glib-2.4.5/glib/gmacros.h
) folgt:
#define G_GNUC_PRINTF(format_idx, arg_idx) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
Vom gnome documentation:
erweitert sich auf die GNU C Attribut Format-Funktion, wenn der Compiler gcc ist. Dies wird zum Deklarieren von Funktionen verwendet, die eine variable Anzahl von Argumenten mit der gleichen Syntax wie printf() haben. Es ermöglicht dem Compiler, die an die Funktion übergebenen Argumente zu prüfen.
Platzieren Sie das Attribut nach der Funktionsdeklaration direkt vor dem Semikolon.
Parameter:
format_idx
: der Index des Arguments der Formatzeichenkette entsprechenden
arg_idx
(Die Argumente von 1 numeriert sind): Der Index der ersten von dem Format Argumente
Beispiel 1:
static void ddict_debug(const char* fmt, ...) G_GNUC_PRINTF(1, 2);
// | | | |
// format string, format_idx = 1 ----+ | <----+ |
// format arguments, arg_idx = 2 ---------+ <-------+
Beispiel 2:
static void foo_debug(int foo, const char* fmt, ...) G_GNUC_PRINTF(2, 3);
// | | | | |
// not a printf argument --+ | | | |
// format string, format_idx = 2 -----------+ | <----+ |
// format arguments, arg_idx = 3 ----------------+ <-------+
Zusammenfassung:
Gibt es nur eine Funktionsdeklaration oder zwei?
Eine printf() - ähnliche Funktion ist definiert. Das Makro weist den Compiler an, die an die Funktion übergebenen Argumente zu prüfen.
Vielen Dank. Das ist genau das, was ich brauche. –