2016-04-22 13 views

答えて

7

G_GNUC_PRINTF()を参照してください、詳細については__attribute__ ((format (printf, 1, 2)));

に拡大する、機能のarugmentsようprintfを検証するために、それを持ってglibのライブラリプリプロセッサマクロです。 (glib-2.4.5/glib/gmacros.hから)次のように定義されているGCCコンパイラ :

#define G_GNUC_PRINTF(format_idx, arg_idx) \ 
    __attribute__((__format__ (__printf__, format_idx, arg_idx))) 

gnome documentationから:コンパイラがGCCである場合

は、GNU C形式の関数属性に展開します。これは、printf()と同じ構文で、可変数の引数を取る関数を宣言するために使用されます。コンパイラは、関数に渡された引数を型チェックできます。

セミコロンの直前で、関数宣言の後に属性を配置します。

パラメータ:

format_idx

arg_idx(引数は1から番号付けされる)フォーマット文字列に対応する引数の指標:フォーマット引数の最初のインデックス

例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 ----------------+   <-------+ 

概要:

ただ一つの関数の宣言や二つはありますか?

1つのprintf()のような関数が定義されています。マクロは、関数に渡された引数の型チェックをコンパイラに指示します。

+0

ありがとうございました。これは私が必要とするものです。 –