这个 C 代码是什么意思 (G_GNUC_PRINTF)?
What does this C code mean (G_GNUC_PRINTF)?
static void ddict_debug(const char* fmt, ...) G_GNUC_PRINTF(1, 2);
我在 .c 文件中找到了这个,但我不明白这一行:
是否只有一个或两个函数声明?
这个代码是什么意思?
这里只声明了一个函数。声明是 static void ddict_debug(const char* fmt, ...);
,G_GNUC_PRINTF(1, 2)
部分可能是一个扩展为编译器特定函数注释的宏。例如,gcc 有它来验证 printf
就像函数的参数一样,在这种情况下它会扩展到 __attribute__ ((format (printf, 1, 2)));
详情请参考
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes
G_GNUC_PRINTF()
是一个 glib 库预处理器宏。
对于 gcc 编译器,它定义如下(来自 glib-2.4.5/glib/gmacros.h
):
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
Expands to the GNU C format function attribute if the compiler is gcc. This is used for declaring functions which take a variable number of arguments, with the same syntax as printf(). It allows the compiler to type-check the arguments passed to the function.
Place the attribute after the function declaration, just before the semicolon.
Parameters:
format_idx
: the index of the argument corresponding to the format string (The arguments are numbered from 1)
arg_idx
: the index of the first of the format arguments
示例 1:
static void ddict_debug(const char* fmt, ...) G_GNUC_PRINTF(1, 2);
// | | | |
// format string, format_idx = 1 ----+ | <----+ |
// format arguments, arg_idx = 2 ---------+ <-------+
示例 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 ----------------+ <-------+
总结:
Is there just one function declaration or two ?
定义了一个类似 printf() 的函数。宏告诉编译器对传递给函数的参数进行类型检查。
static void ddict_debug(const char* fmt, ...) G_GNUC_PRINTF(1, 2);
我在 .c 文件中找到了这个,但我不明白这一行: 是否只有一个或两个函数声明?
这个代码是什么意思?
这里只声明了一个函数。声明是 static void ddict_debug(const char* fmt, ...);
,G_GNUC_PRINTF(1, 2)
部分可能是一个扩展为编译器特定函数注释的宏。例如,gcc 有它来验证 printf
就像函数的参数一样,在这种情况下它会扩展到 __attribute__ ((format (printf, 1, 2)));
详情请参考
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes
G_GNUC_PRINTF()
是一个 glib 库预处理器宏。
对于 gcc 编译器,它定义如下(来自 glib-2.4.5/glib/gmacros.h
):
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
Expands to the GNU C format function attribute if the compiler is gcc. This is used for declaring functions which take a variable number of arguments, with the same syntax as printf(). It allows the compiler to type-check the arguments passed to the function.
Place the attribute after the function declaration, just before the semicolon.
Parameters:
format_idx
: the index of the argument corresponding to the format string (The arguments are numbered from 1)
arg_idx
: the index of the first of the format arguments
示例 1:
static void ddict_debug(const char* fmt, ...) G_GNUC_PRINTF(1, 2);
// | | | |
// format string, format_idx = 1 ----+ | <----+ |
// format arguments, arg_idx = 2 ---------+ <-------+
示例 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 ----------------+ <-------+
总结:
Is there just one function declaration or two ?
定义了一个类似 printf() 的函数。宏告诉编译器对传递给函数的参数进行类型检查。